From b93a761c64e00b14e5866921c2084418b88d895b Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 1 Jun 2024 20:37:15 +1000 Subject: [PATCH 01/41] Changed the structure of the project --- lib/core/app/router/router.dart | 4 +- lib/core/di/injector.dart | 128 ++++++++---------- .../audio_metadata_editor.dart | 7 - .../loading_track_info.dart | 12 -- .../waiting_in_loading_queue_track_info.dart | 12 -- .../models/local_tracks_collection_dto.dart | 10 -- lib/features/data_domain/auth/auth.dart | 2 + lib/features/data_domain/auth/data/data.dart | 2 + .../local_auth/data_source/data_source.dart | 1 + .../data_source/local_auth_data_source.dart | 2 +- .../auth/data/local_auth/local_auth.dart | 3 + .../models/local_auth_credentials.dart | 0 .../auth/data/local_auth/models/models.dart | 1 + .../repository/converter/converter.dart | 1 + ...entials_to_auth_credentials_converter.dart | 5 +- .../local_auth_repository_impl.dart | 13 +- .../local_auth/repository/repository.dart | 2 + .../network_auth/data_source/data_source.dart | 1 + .../data_source/network_auth_data_source.dart | 4 +- .../network_auth/models/auth_response.dart | 0 .../auth/data/network_auth/models/models.dart | 1 + .../auth/data/network_auth/network_auth.dart | 3 + .../network_auth_repository_impl.dart | 8 +- .../network_auth/repository/repository.dart | 1 + .../data_domain/auth/domain/domain.dart | 4 + .../auth/domain/local_auth/local_auth.dart | 2 + .../local_client_auth_repository.dart | 3 +- .../local_full_auth_repository.dart | 3 +- .../local_user_auth_repository.dart | 3 +- .../local_auth/repositories/repositories.dart | 3 + .../use_cases/clear_user_credentials.dart | 4 +- .../use_cases/get_client_credentials.dart | 6 +- .../use_cases/save_client_credentials.dart | 6 +- .../local_auth/use_cases/use_cases.dart | 3 + .../domain/network_auth/network_auth.dart | 1 + .../repository/network_auth_repository.dart | 4 +- .../network_auth/repository/repository.dart | 1 + .../auth/domain/service/service.dart | 2 + .../domain}/service/service/auth_service.dart | 0 .../service/service/auth_service_impl.dart | 9 +- .../auth/domain/service/service/service.dart | 2 + .../service/use_cases/authorize_user.dart | 3 +- .../domain/service/use_cases/use_cases.dart | 1 + .../domain}/shared/client_credentials.dart | 0 .../auth/domain}/shared/full_credentials.dart | 4 +- .../auth/domain/shared/shared.dart | 3 + .../auth/domain}/shared/user_credentials.dart | 0 .../data_domain/settings/data/data.dart | 3 + .../data/data_source/data_source.dart | 1 + .../data_source/settings_data_source.dart | 2 +- .../settings/data}/models/app_settings.dart | 0 .../settings/data/models/models.dart | 1 + .../settings/data/repository/repository.dart | 1 + .../repository/settings_repository_impl.dart | 12 +- .../data_domain/settings/domain/domain.dart | 3 + .../enitities/download_tracks_settings.dart | 2 +- .../settings/domain/enitities/enitities.dart | 2 + .../settings/domain}/enitities/save_mode.dart | 0 .../download_tracks_settings_repository.dart | 2 +- .../language_settings_repository.dart | 0 .../domain/repository/repository.dart | 2 + .../use_cases/get_available_languages.dart | 2 +- .../get_download_tracks_settings.dart | 5 +- .../domain}/use_cases/get_language.dart | 2 +- .../save_download_tracks_setting.dart | 5 +- .../domain}/use_cases/save_language.dart | 3 +- .../settings/domain/use_cases/use_cases.dart | 5 + .../data_domain/settings/settings.dart | 2 + .../spotify_credentials_converter.dart | 2 +- .../spotify_requests_converter.dart | 6 +- .../shared/data}/spotify_api_request.dart | 0 .../domain}/spotify_repository_request.dart | 2 +- .../spotify_profile/data/data.dart | 2 + .../data/data_source/data_source.dart | 1 + .../spotify_profile_data_source.dart | 2 +- .../data/repository/repository.dart | 1 + .../spotify_profile_repository_impl.dart | 10 +- .../spotify_profile/domain/domain.dart | 4 + .../domain/entities/entities.dart | 1 + .../domain}/entities/spotify_profile.dart | 0 .../domain/repository/repository.dart | 1 + .../spotify_profile_repostitory.dart | 4 +- .../domain/service/service.dart | 2 + .../service/spotify_profile_service.dart | 2 +- .../service/spotify_profile_service_impl.dart | 10 +- .../use_cases/get_spotify_profile.dart | 4 +- .../domain/use_cases/use_cases.dart | 1 + .../spotify_profile/spotify_profile.dart | 2 + .../data_domain/tracks/data/data.dart | 4 + .../data_sources/data_sources.dart | 1 + ...owload_audio_from_youtube_data_source.dart | 8 +- .../audio_metadata_editor.dart | 1 + .../audio_metadata_editor_impl.dart | 4 +- .../ffmpeg_file_to_mp3_converter.dart | 2 +- .../file_to_mp3_converter.dart | 0 .../data/dowload_tracks/dowload_tracks.dart | 3 + .../dowload_audio_from_youtube_args.dart | 2 +- .../loading_stream/audio_loading_stream.dart | 0 .../models/loading_stream/loading_stream.dart | 1 + .../models/metadata/album_metadata.dart | 0 .../models/metadata/audio_metadata.dart | 0 .../models/metadata/metadata.dart | 2 + .../data/dowload_tracks/models/models.dart | 3 + .../repositories/converters/converters.dart | 1 + .../track_to_audio_metadata_converter.dart | 6 +- .../dowload_tracks_repository_impl.dart | 22 +-- .../repositories/repositories.dart | 3 + .../loading_track_info.dart | 12 ++ .../repository_impl_classes.dart | 2 + .../waiting_in_loading_queue_track_info.dart | 12 ++ .../data_sources/data_sources.dart | 1 + .../local_tracks_data_source.dart | 8 +- .../data/local_tracks/local_tracks.dart | 3 + .../local_tracks/models/local_track_dto.dart | 2 +- .../models/local_tracks_collection_dto.dart | 10 ++ .../local_tracks_collection_dto_type.dart | 0 .../local_tracks_collections_group_dto.dart | 0 .../data/local_tracks/models/models.dart | 4 + .../repositories/converters/converters.dart | 4 + ...al_track_dto_to_local_track_converter.dart | 6 +- ..._to_local_tracks_collection_converter.dart | 6 +- ...ocal_tracks_collection_type_converter.dart | 4 +- ...al_tracks_collections_group_converter.dart | 4 +- .../local_tracks_repository_impl.dart | 12 +- .../repositories/repositories.dart | 2 + .../data_sources/data_sources.dart | 1 + .../network_tracks_data_source.dart | 6 +- .../models/get_tracks_args.dart | 2 +- .../data/network_tracks/models/models.dart | 3 + .../tracks_dto_getting_ended_status.dart | 0 .../models/tracks_getting_stream.dart | 2 +- .../data/network_tracks/network_tracks.dart | 3 + .../repositories/converters/converters.dart | 1 + .../track_dto_to_track_converter.dart | 6 +- .../network_tracks_repository_impl.dart | 22 +-- .../repositories/repositories.dart | 2 + .../data_sources/data_sources.dart | 1 + .../search_video_on_youtube_data_source.dart | 0 .../repositories/converters/converters.dart | 1 + .../video_dto_to_video_converter.dart | 2 +- .../repositories/repositories.dart | 2 + ...earch_videos_by_track_repository_impl.dart | 22 +-- .../search_videos_by_track.dart | 2 + .../data_domain/tracks/domain/domain.dart | 7 + .../download_tracks/download_tracks.dart | 2 + .../download_tracks/entities/entities.dart | 5 + .../entities/loading_track_id.dart | 2 +- .../entities/loading_track_observer.dart | 2 +- .../entities/loading_track_status.dart | 0 .../entities/track_loading_notifier.dart | 4 +- .../entities/track_with_lazy_youtube_url.dart | 2 +- .../dowload_tracks_repository.dart | 6 +- .../repositories/repositories.dart | 1 + .../local_tracks/entities/entities.dart | 4 + .../local_tracks/entities/local_track.dart | 2 +- .../entities/local_tracks_collection.dart | 4 +- .../local_tracks_collection_group.dart | 0 .../local_tracks_collection_type.dart | 0 .../domain/local_tracks/local_tracks.dart | 2 + .../repositories/local_tracks_repository.dart | 4 +- .../repositories/repositories.dart | 1 + .../network_tracks/entities/entities.dart | 3 + ...et_tracks_from_tracks_collection_args.dart | 4 +- .../entities/tracks_getting_ended_status.dart | 0 .../entities/tracks_getting_observer.dart | 4 +- .../domain/network_tracks/network_tracks.dart | 2 + .../network_tracks_repository.dart | 6 + .../repositories/repositories.dart | 1 + .../entities/entities.dart | 2 + .../loading_track_observer_with_id.dart | 2 +- .../loading_tracks_collection.dart | 5 + .../loading_tracks_collection_controller.dart | 10 +- .../loading_tracks_collection_info.dart | 2 +- .../loading_tracks_collection_observer.dart | 2 +- .../loading_tracks_collection_status.dart | 0 .../repository/loading_tracks_collection.dart | 9 ++ .../loading_tracks_collection_id.dart | 2 +- .../loading_tracks_collections_observer.dart | 2 +- .../entities/repository/repository.dart | 3 + .../observe_tracks_loading.dart | 3 + .../observe_tracks_loading_repository.dart | 4 +- ...bserve_tracks_loading_repository_impl.dart | 14 +- .../repository/repository.dart | 2 + ...t_loading_tracks_collections_observer.dart | 4 +- .../use_cases/use_cases.dart | 1 + .../entities/entities.dart | 1 + .../entities/video.dart | 0 .../repositories/repositories.dart | 1 + .../search_videos_by_track_repository.dart | 4 +- .../search_videos_by_track.dart | 3 + .../use_cases/find_10_videos_by_track.dart | 6 +- .../use_cases/get_video_by_url.dart | 4 +- .../use_cases/use_cases.dart | 2 + .../domain/services/entities/entities.dart | 2 + .../entities/track_with_loading_observer.dart | 4 +- ...ith_loading_observer_getting_observer.dart | 4 +- .../tracks/domain/services/services.dart | 3 + .../download_tracks_service.dart | 1 + .../download_tracks_service_impl.dart | 38 +++--- .../get_tracks_service.dart | 1 + .../get_tracks_service_impl.dart | 40 +++--- .../domain/services/services/services.dart | 2 + .../services/tools/save_path_generator.dart | 6 +- ...ocal_tracks_collection_type_converter.dart | 4 +- .../use_cases/cancel_track_loading.dart | 4 +- .../services/use_cases/download_track.dart | 6 +- ...download_tracks_from_getting_observer.dart | 4 +- .../use_cases/download_tracks_range.dart | 4 +- ...ading_observer_from_tracks_collection.dart | 6 +- ...er_from_tracks_collection_with_offset.dart | 6 +- .../domain/services/use_cases/use_cases.dart | 6 + .../tracks/domain}/shared/entities/album.dart | 0 .../domain/shared/entities/entities.dart | 4 + .../tracks/domain}/shared/entities/track.dart | 4 +- .../shared/entities/tracks_collection.dart | 0 .../entities/tracks_collection_type.dart | 0 .../tracks/domain/shared/shared.dart | 1 + lib/features/data_domain/tracks/tracks.dart | 2 + .../tracks_collections/data/data.dart | 2 + .../data_source/data_source.dart | 1 + ...tracks_collectons_history_data_source.dart | 2 +- .../history_tracks_collectons.dart | 3 + .../models/history_tracks_collection_dto.dart | 0 .../models/models.dart | 1 + .../repositories/converters/converters.dart | 3 + .../history_tracks_collections_converter.dart | 6 +- ...story_tracks_collection_dto_converter.dart | 6 +- .../tracks_collection_types_converter.dart | 4 +- .../repositories/repositories.dart | 2 + ...s_collections_history_repository_impl.dart | 12 +- .../data_source/data_source.dart | 1 + ...etwork_tracks_collections_data_source.dart | 2 +- .../network_tracks_collections.dart | 2 + ...um_dto_to_tracks_collection_converter.dart | 4 +- .../repositories/converters/converters.dart | 3 + ...st_dto_to_tracks_collection_converter.dart | 4 +- ...ck_dto_to_tracks_collection_converter.dart | 4 +- .../repositories/repositories.dart | 2 + .../tracks_collections_repository_impl.dart | 18 +-- .../tracks_collections/domain/domain.dart | 2 + .../entities/entities.dart | 1 + .../entities/history_tracks_collection.dart | 2 +- .../history_tracks_collectons.dart | 3 + .../repositories/repositories.dart | 1 + ...tracks_collections_history_repository.dart | 4 +- .../add_tracks_collection_to_history.dart | 4 +- .../use_cases/get_ordered_history.dart | 4 +- .../use_cases/use_cases.dart | 2 + .../network_tracks_collections.dart | 3 + ...network_tracks_collections_repository.dart | 6 +- .../repositories/repositories.dart | 1 + .../network_tracks_collections_service.dart | 4 +- ...twork_tracks_collections_service_impl.dart | 12 +- .../service/service.dart | 2 + ...cks_collection_by_type_and_spotify_id.dart | 6 +- .../get_tracks_collection_by_url.dart | 4 +- .../use_cases/use_cases.dart | 2 + .../tracks_collections.dart | 2 + .../network_tracks_repository.dart | 6 - .../repository/loading_tracks_collection.dart | 9 -- .../download_tracks_service.dart | 17 --- .../get_tracks_service.dart | 9 -- .../bloc/change_source_video_bloc.dart | 8 +- .../view/change_source_video_screen.dart | 2 +- .../filter_tracks/filter_tracks_bloc.dart | 2 +- .../get_and_download_tracks_bloc.dart | 18 +-- .../base/get_tracks_collection_bloc.dart | 4 +- ...get_tracks_collection_by_history_bloc.dart | 6 +- .../get_tracks_collection_by_url_bloc.dart | 4 +- .../download_tracks_collection_screen.dart | 2 +- .../bloc/download_track_info_bloc.dart | 6 +- .../view/download_track_info.dart | 2 +- ...download_track_info_status_tile_cubit.dart | 6 +- .../view/download_track_info_status_tile.dart | 2 +- .../track_tile/bloc/track_tile_bloc.dart | 12 +- .../widgets/track_tile/view/track_tile.dart | 2 +- .../history/bloc/history_bloc.dart | 4 +- .../presentation/home/view/home_screen.dart | 2 +- .../loading_tracks_collections_list_bloc.dart | 6 +- .../view/loading_tracks_collections_list.dart | 2 +- .../loading_tracks_collection_tile_cubit.dart | 4 +- .../view/loading_tracks_collection_tile.dart | 4 +- .../blocs/account_auth/account_auth_bloc.dart | 8 +- .../blocs/client_auth/client_auth_bloc.dart | 5 +- .../bloc/download_tracks_settings_bloc.dart | 6 +- .../view/download_tracks_settings_editor.dart | 2 +- .../bloc/language_setting_bloc.dart | 4 +- ...ollections_loading_notifications_bloc.dart | 8 +- lib/main.dart | 2 +- 289 files changed, 727 insertions(+), 537 deletions(-) delete mode 100644 lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart delete mode 100644 lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart delete mode 100644 lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart delete mode 100644 lib/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart create mode 100644 lib/features/data_domain/auth/auth.dart create mode 100644 lib/features/data_domain/auth/data/data.dart create mode 100644 lib/features/data_domain/auth/data/local_auth/data_source/data_source.dart rename lib/features/{data/auth => data_domain/auth/data}/local_auth/data_source/local_auth_data_source.dart (94%) create mode 100644 lib/features/data_domain/auth/data/local_auth/local_auth.dart rename lib/features/{data/auth => data_domain/auth/data}/local_auth/models/local_auth_credentials.dart (100%) create mode 100644 lib/features/data_domain/auth/data/local_auth/models/models.dart create mode 100644 lib/features/data_domain/auth/data/local_auth/repository/converter/converter.dart rename lib/features/{data/auth => data_domain/auth/data}/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart (87%) rename lib/features/{data/auth => data_domain/auth/data}/local_auth/repository/local_auth_repository_impl.dart (80%) create mode 100644 lib/features/data_domain/auth/data/local_auth/repository/repository.dart create mode 100644 lib/features/data_domain/auth/data/network_auth/data_source/data_source.dart rename lib/features/{data/auth => data_domain/auth/data}/network_auth/data_source/network_auth_data_source.dart (93%) rename lib/features/{data/auth => data_domain/auth/data}/network_auth/models/auth_response.dart (100%) create mode 100644 lib/features/data_domain/auth/data/network_auth/models/models.dart create mode 100644 lib/features/data_domain/auth/data/network_auth/network_auth.dart rename lib/features/{data/auth => data_domain/auth/data}/network_auth/repository/network_auth_repository_impl.dart (68%) create mode 100644 lib/features/data_domain/auth/data/network_auth/repository/repository.dart create mode 100644 lib/features/data_domain/auth/domain/domain.dart create mode 100644 lib/features/data_domain/auth/domain/local_auth/local_auth.dart rename lib/features/{domain/auth => data_domain/auth/domain}/local_auth/repositories/local_client_auth_repository.dart (77%) rename lib/features/{domain/auth => data_domain/auth/domain}/local_auth/repositories/local_full_auth_repository.dart (76%) rename lib/features/{domain/auth => data_domain/auth/domain}/local_auth/repositories/local_user_auth_repository.dart (76%) create mode 100644 lib/features/data_domain/auth/domain/local_auth/repositories/repositories.dart rename lib/features/{domain/auth => data_domain/auth/domain}/local_auth/use_cases/clear_user_credentials.dart (82%) rename lib/features/{domain/auth => data_domain/auth/domain}/local_auth/use_cases/get_client_credentials.dart (73%) rename lib/features/{domain/auth => data_domain/auth/domain}/local_auth/use_cases/save_client_credentials.dart (74%) create mode 100644 lib/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/auth/domain/network_auth/network_auth.dart rename lib/features/{domain/auth => data_domain/auth/domain}/network_auth/repository/network_auth_repository.dart (60%) create mode 100644 lib/features/data_domain/auth/domain/network_auth/repository/repository.dart create mode 100644 lib/features/data_domain/auth/domain/service/service.dart rename lib/features/{domain/auth => data_domain/auth/domain}/service/service/auth_service.dart (100%) rename lib/features/{domain/auth => data_domain/auth/domain}/service/service/auth_service_impl.dart (75%) create mode 100644 lib/features/data_domain/auth/domain/service/service/service.dart rename lib/features/{domain/auth => data_domain/auth/domain}/service/use_cases/authorize_user.dart (82%) create mode 100644 lib/features/data_domain/auth/domain/service/use_cases/use_cases.dart rename lib/features/{domain/auth => data_domain/auth/domain}/shared/client_credentials.dart (100%) rename lib/features/{domain/auth => data_domain/auth/domain}/shared/full_credentials.dart (69%) create mode 100644 lib/features/data_domain/auth/domain/shared/shared.dart rename lib/features/{domain/auth => data_domain/auth/domain}/shared/user_credentials.dart (100%) create mode 100644 lib/features/data_domain/settings/data/data.dart create mode 100644 lib/features/data_domain/settings/data/data_source/data_source.dart rename lib/features/{data/settings => data_domain/settings/data}/data_source/settings_data_source.dart (94%) rename lib/features/{data/settings => data_domain/settings/data}/models/app_settings.dart (100%) create mode 100644 lib/features/data_domain/settings/data/models/models.dart create mode 100644 lib/features/data_domain/settings/data/repository/repository.dart rename lib/features/{data/settings => data_domain/settings/data}/repository/settings_repository_impl.dart (82%) create mode 100644 lib/features/data_domain/settings/domain/domain.dart rename lib/features/{domain/settings => data_domain/settings/domain}/enitities/download_tracks_settings.dart (74%) create mode 100644 lib/features/data_domain/settings/domain/enitities/enitities.dart rename lib/features/{domain/settings => data_domain/settings/domain}/enitities/save_mode.dart (100%) rename lib/features/{domain/settings => data_domain/settings/domain}/repository/download_tracks_settings_repository.dart (76%) rename lib/features/{domain/settings => data_domain/settings/domain}/repository/language_settings_repository.dart (100%) create mode 100644 lib/features/data_domain/settings/domain/repository/repository.dart rename lib/features/{domain/settings => data_domain/settings/domain}/use_cases/get_available_languages.dart (84%) rename lib/features/{domain/settings => data_domain/settings/domain}/use_cases/get_download_tracks_settings.dart (75%) rename lib/features/{domain/settings => data_domain/settings/domain}/use_cases/get_language.dart (83%) rename lib/features/{domain/settings => data_domain/settings/domain}/use_cases/save_download_tracks_setting.dart (76%) rename lib/features/{domain/settings => data_domain/settings/domain}/use_cases/save_language.dart (83%) create mode 100644 lib/features/data_domain/settings/domain/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/settings/settings.dart rename lib/features/{data/shared => data_domain/shared/data}/converters/spotify_credentials_converter.dart (91%) rename lib/features/{data/shared => data_domain/shared/data}/converters/spotify_requests_converter.dart (72%) rename lib/features/{data/shared => data_domain/shared/data}/spotify_api_request.dart (100%) rename lib/features/{domain/shared => data_domain/shared/domain}/spotify_repository_request.dart (69%) create mode 100644 lib/features/data_domain/spotify_profile/data/data.dart create mode 100644 lib/features/data_domain/spotify_profile/data/data_source/data_source.dart rename lib/features/{data/spotify_profile => data_domain/spotify_profile/data}/data_source/spotify_profile_data_source.dart (88%) create mode 100644 lib/features/data_domain/spotify_profile/data/repository/repository.dart rename lib/features/{data/spotify_profile => data_domain/spotify_profile/data}/repository/spotify_profile_repository_impl.dart (62%) create mode 100644 lib/features/data_domain/spotify_profile/domain/domain.dart create mode 100644 lib/features/data_domain/spotify_profile/domain/entities/entities.dart rename lib/features/{domain/spotify_profile => data_domain/spotify_profile/domain}/entities/spotify_profile.dart (100%) create mode 100644 lib/features/data_domain/spotify_profile/domain/repository/repository.dart rename lib/features/{domain/spotify_profile => data_domain/spotify_profile/domain}/repository/spotify_profile_repostitory.dart (57%) create mode 100644 lib/features/data_domain/spotify_profile/domain/service/service.dart rename lib/features/{domain/spotify_profile => data_domain/spotify_profile/domain}/service/spotify_profile_service.dart (68%) rename lib/features/{domain/spotify_profile => data_domain/spotify_profile/domain}/service/spotify_profile_service_impl.dart (70%) rename lib/features/{domain/spotify_profile => data_domain/spotify_profile/domain}/use_cases/get_spotify_profile.dart (72%) create mode 100644 lib/features/data_domain/spotify_profile/domain/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/spotify_profile/spotify_profile.dart create mode 100644 lib/features/data_domain/tracks/data/data.dart create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/data_sources/data_sources.dart rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart (93%) create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart (85%) rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart (65%) rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart (100%) create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/dowload_tracks.dart rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/models/dowload_audio_from_youtube_args.dart (72%) rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/models/loading_stream/audio_loading_stream.dart (100%) create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/loading_stream.dart rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/models/metadata/album_metadata.dart (100%) rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/models/metadata/audio_metadata.dart (100%) create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/metadata.dart create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/models/models.dart create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/converters.dart rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart (67%) rename lib/features/{data/tracks => data_domain/tracks/data}/dowload_tracks/repositories/dowload_tracks_repository_impl.dart (81%) create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/repositories/repositories.dart create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/repository_impl_classes.dart create mode 100644 lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart create mode 100644 lib/features/data_domain/tracks/data/local_tracks/data_sources/data_sources.dart rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/data_sources/local_tracks_data_source.dart (88%) create mode 100644 lib/features/data_domain/tracks/data/local_tracks/local_tracks.dart rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/models/local_track_dto.dart (69%) create mode 100644 lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/models/local_tracks_collection_dto_type.dart (100%) rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/models/local_tracks_collections_group_dto.dart (100%) create mode 100644 lib/features/data_domain/tracks/data/local_tracks/models/models.dart create mode 100644 lib/features/data_domain/tracks/data/local_tracks/repositories/converters/converters.dart rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart (69%) rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart (74%) rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart (85%) rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart (70%) rename lib/features/{data/tracks => data_domain/tracks/data}/local_tracks/repositories/local_tracks_repository_impl.dart (69%) create mode 100644 lib/features/data_domain/tracks/data/local_tracks/repositories/repositories.dart create mode 100644 lib/features/data_domain/tracks/data/network_tracks/data_sources/data_sources.dart rename lib/features/{data/tracks => data_domain/tracks/data}/network_tracks/data_sources/network_tracks_data_source.dart (96%) rename lib/features/{data/tracks => data_domain/tracks/data}/network_tracks/models/get_tracks_args.dart (87%) create mode 100644 lib/features/data_domain/tracks/data/network_tracks/models/models.dart rename lib/features/{data/tracks => data_domain/tracks/data}/network_tracks/models/tracks_dto_getting_ended_status.dart (100%) rename lib/features/{data/tracks => data_domain/tracks/data}/network_tracks/models/tracks_getting_stream.dart (70%) create mode 100644 lib/features/data_domain/tracks/data/network_tracks/network_tracks.dart create mode 100644 lib/features/data_domain/tracks/data/network_tracks/repositories/converters/converters.dart rename lib/features/{data/tracks => data_domain/tracks/data}/network_tracks/repositories/converters/track_dto_to_track_converter.dart (78%) rename lib/features/{data/tracks => data_domain/tracks/data}/network_tracks/repositories/network_tracks_repository_impl.dart (68%) create mode 100644 lib/features/data_domain/tracks/data/network_tracks/repositories/repositories.dart create mode 100644 lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/data_sources.dart rename lib/features/{data/tracks => data_domain/tracks/data}/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart (100%) create mode 100644 lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/converters.dart rename lib/features/{data/tracks => data_domain/tracks/data}/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart (85%) create mode 100644 lib/features/data_domain/tracks/data/search_videos_by_track/repositories/repositories.dart rename lib/features/{data/tracks => data_domain/tracks/data}/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart (77%) create mode 100644 lib/features/data_domain/tracks/data/search_videos_by_track/search_videos_by_track.dart create mode 100644 lib/features/data_domain/tracks/domain/domain.dart create mode 100644 lib/features/data_domain/tracks/domain/download_tracks/download_tracks.dart create mode 100644 lib/features/data_domain/tracks/domain/download_tracks/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/download_tracks/entities/loading_track_id.dart (79%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/download_tracks/entities/loading_track_observer.dart (91%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/download_tracks/entities/loading_track_status.dart (100%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/download_tracks/entities/track_loading_notifier.dart (91%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/download_tracks/entities/track_with_lazy_youtube_url.dart (87%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/download_tracks/repositories/dowload_tracks_repository.dart (58%) create mode 100644 lib/features/data_domain/tracks/domain/download_tracks/repositories/repositories.dart create mode 100644 lib/features/data_domain/tracks/domain/local_tracks/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/local_tracks/entities/local_track.dart (68%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/local_tracks/entities/local_tracks_collection.dart (66%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/local_tracks/entities/local_tracks_collection_group.dart (100%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/local_tracks/entities/local_tracks_collection_type.dart (100%) create mode 100644 lib/features/data_domain/tracks/domain/local_tracks/local_tracks.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/local_tracks/repositories/local_tracks_repository.dart (65%) create mode 100644 lib/features/data_domain/tracks/domain/local_tracks/repositories/repositories.dart create mode 100644 lib/features/data_domain/tracks/domain/network_tracks/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/network_tracks/entities/get_tracks_from_tracks_collection_args.dart (58%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/network_tracks/entities/tracks_getting_ended_status.dart (100%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/network_tracks/entities/tracks_getting_observer.dart (54%) create mode 100644 lib/features/data_domain/tracks/domain/network_tracks/network_tracks.dart create mode 100644 lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart create mode 100644 lib/features/data_domain/tracks/domain/network_tracks/repositories/repositories.dart create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart (62%) create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart (84%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart (87%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart (84%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart (100%) create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart (75%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart (76%) create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/repository.dart create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/observe_tracks_loading.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/repository/observe_tracks_loading_repository.dart (55%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart (63%) create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/repository.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart (70%) create mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/search_videos_by_track/entities/video.dart (100%) create mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/repositories.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/search_videos_by_track/repositories/search_videos_by_track_repository.dart (64%) create mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/search_videos_by_track.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/search_videos_by_track/use_cases/find_10_videos_by_track.dart (64%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/search_videos_by_track/use_cases/get_video_by_url.dart (70%) create mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/tracks/domain/services/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/entities/track_with_loading_observer.dart (78%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/entities/tracks_with_loading_observer_getting_observer.dart (61%) create mode 100644 lib/features/data_domain/tracks/domain/services/services.dart create mode 100644 lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/services/download_tracks_service/download_tracks_service_impl.dart (69%) create mode 100644 lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/services/get_tracks_service/get_tracks_service_impl.dart (68%) create mode 100644 lib/features/data_domain/tracks/domain/services/services/services.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/services/tools/save_path_generator.dart (64%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart (78%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/use_cases/cancel_track_loading.dart (71%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/use_cases/download_track.dart (62%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/use_cases/download_tracks_from_getting_observer.dart (71%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/use_cases/download_tracks_range.dart (70%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart (67%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart (69%) create mode 100644 lib/features/data_domain/tracks/domain/services/use_cases/use_cases.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/shared/entities/album.dart (100%) create mode 100644 lib/features/data_domain/tracks/domain/shared/entities/entities.dart rename lib/features/{domain/tracks => data_domain/tracks/domain}/shared/entities/track.dart (68%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/shared/entities/tracks_collection.dart (100%) rename lib/features/{domain/tracks => data_domain/tracks/domain}/shared/entities/tracks_collection_type.dart (100%) create mode 100644 lib/features/data_domain/tracks/domain/shared/shared.dart create mode 100644 lib/features/data_domain/tracks/tracks.dart create mode 100644 lib/features/data_domain/tracks_collections/data/data.dart create mode 100644 lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/data_source.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart (93%) create mode 100644 lib/features/data_domain/tracks_collections/data/history_tracks_collectons/history_tracks_collectons.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/history_tracks_collectons/models/history_tracks_collection_dto.dart (100%) create mode 100644 lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/models.dart create mode 100644 lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/converters.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart (71%) rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart (65%) rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart (84%) create mode 100644 lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/repositories.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart (71%) create mode 100644 lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/data_source.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/network_tracks_collections/data_source/network_tracks_collections_data_source.dart (94%) create mode 100644 lib/features/data_domain/tracks_collections/data/network_tracks_collections/network_tracks_collections.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart (82%) create mode 100644 lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/converters.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart (82%) rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart (82%) create mode 100644 lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/repositories.dart rename lib/features/{data/tracks_collections => data_domain/tracks_collections/data}/network_tracks_collections/repositories/tracks_collections_repository_impl.dart (73%) create mode 100644 lib/features/data_domain/tracks_collections/domain/domain.dart create mode 100644 lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/entities.dart rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/history_tracks_collectons/entities/history_tracks_collection.dart (84%) create mode 100644 lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/history_tracks_collectons.dart create mode 100644 lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/repositories.dart rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/history_tracks_collectons/repositories/tracks_collections_history_repository.dart (65%) rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart (72%) rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/history_tracks_collectons/use_cases/get_ordered_history.dart (75%) create mode 100644 lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/tracks_collections/domain/network_tracks_collections/network_tracks_collections.dart rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/network_tracks_collections/repositories/network_tracks_collections_repository.dart (60%) create mode 100644 lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/repositories.dart rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/network_tracks_collections/service/network_tracks_collections_service.dart (64%) rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/network_tracks_collections/service/network_tracks_collections_service_impl.dart (70%) create mode 100644 lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/service.dart rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart (64%) rename lib/features/{domain/tracks_collections => data_domain/tracks_collections/domain}/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart (68%) create mode 100644 lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/use_cases.dart create mode 100644 lib/features/data_domain/tracks_collections/tracks_collections.dart delete mode 100644 lib/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart delete mode 100644 lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection.dart delete mode 100644 lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart delete mode 100644 lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart diff --git a/lib/core/app/router/router.dart b/lib/core/app/router/router.dart index 6dbdc23..98a1d1b 100644 --- a/lib/core/app/router/router.dart +++ b/lib/core/app/router/router.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/foundation.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/about_app/view/about_app_screen.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/view/change_source_video_screen.dart'; import 'package:spotify_downloader/features/presentation/history/view/history_screen.dart'; diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index ed5a843..a80ea09 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -3,80 +3,58 @@ import 'package:spotify_downloader/core/db/local_db.dart'; import 'package:spotify_downloader/core/db/local_db_impl.dart'; import 'package:spotify_downloader/core/permissions/permissions_manager.dart'; import 'package:spotify_downloader/core/permissions/requiring_permission_services_initializer.dart'; -import 'package:spotify_downloader/features/data/auth/local_auth/data_source/local_auth_data_source.dart'; -import 'package:spotify_downloader/features/data/auth/local_auth/repository/local_auth_repository_impl.dart'; -import 'package:spotify_downloader/features/data/auth/network_auth/data_source/network_auth_data_source.dart'; -import 'package:spotify_downloader/features/data/auth/network_auth/repository/network_auth_repository_impl.dart'; -import 'package:spotify_downloader/features/data/settings/data_source/settings_data_source.dart'; -import 'package:spotify_downloader/features/data/settings/repository/settings_repository_impl.dart'; -import 'package:spotify_downloader/features/data/spotify_profile/data_source/spotify_profile_data_source.dart'; -import 'package:spotify_downloader/features/data/spotify_profile/repository/spotify_profile_repository_impl.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/data_sources/local_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/repositories/local_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/repositories/dowload_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/data_sources/network_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/repositories/network_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data/tracks/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/network_tracks_collections/repositories/tracks_collections_repository_impl.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/use_cases/clear_user_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/use_cases/get_client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/use_cases/save_client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/network_auth/repository/network_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/service/service/auth_service.dart'; -import 'package:spotify_downloader/features/domain/auth/service/service/auth_service_impl.dart'; -import 'package:spotify_downloader/features/domain/auth/service/use_cases/authorize_user.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/download_tracks_settings_repository.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/language_settings_repository.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_available_languages.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_language.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/save_download_tracks_setting.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/save_language.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/repository/spotify_profile_repostitory.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/service/spotify_profile_service.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/service/spotify_profile_service_impl.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/use_cases/get_spotify_profile.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/use_cases/get_video_by_url.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/download_tracks_range.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/use_cases/get_ordered_history.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/download_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service_impl.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/auth/auth.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; @@ -94,6 +72,8 @@ import 'package:spotify_downloader/features/presentation/settings/widgets/downlo import 'package:spotify_downloader/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart'; import 'package:spotify_downloader/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart'; +import '../../features/data_domain/settings/settings.dart'; + final injector = GetIt.instance; Future initInjector() async { diff --git a/lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart b/lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart deleted file mode 100644 index e70a3d8..0000000 --- a/lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/metadata/audio_metadata.dart'; - -abstract class AudioMetadataEditor { - Future> changeAudioMetadata({required String audioPath, required AudioMetadata audioMetadata}); -} \ No newline at end of file diff --git a/lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart b/lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart deleted file mode 100644 index c5a6a5f..0000000 --- a/lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/loading_stream/audio_loading_stream.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_id.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart'; - -class LoadingTrackInfo { - LoadingTrackInfo( - {required this.loadingTrackId, required this.audioLoadingStream, required this.trackLoadingNotifier}); - - final LoadingTrackId loadingTrackId; - AudioLoadingStream? audioLoadingStream; - TrackLoadingNotifier trackLoadingNotifier; -} diff --git a/lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart b/lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart deleted file mode 100644 index d93e052..0000000 --- a/lib/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_id.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart'; - -class WaitingInLoadingQueueTrackInfo { - WaitingInLoadingQueueTrackInfo( - {required this.loadingTrackId, required this.trackWithLazyYoutubeUrl, required this.trackLoadingNotifier}); - - final LoadingTrackId loadingTrackId; - final TrackWithLazyYoutubeUrl trackWithLazyYoutubeUrl; - final TrackLoadingNotifier trackLoadingNotifier; -} diff --git a/lib/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart b/lib/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart deleted file mode 100644 index 0b4504e..0000000 --- a/lib/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collection_dto_type.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collections_group_dto.dart'; - -class LocalTracksCollectionDto { - LocalTracksCollectionDto({required this.group, required this.spotifyId, required this.type}); - - final String spotifyId; - final LocalTracksCollectionDtoType type; - final LocalTracksCollectionsGroupDto group; -} diff --git a/lib/features/data_domain/auth/auth.dart b/lib/features/data_domain/auth/auth.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/auth/auth.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/data_domain/auth/data/data.dart b/lib/features/data_domain/auth/data/data.dart new file mode 100644 index 0000000..cee314b --- /dev/null +++ b/lib/features/data_domain/auth/data/data.dart @@ -0,0 +1,2 @@ +export 'local_auth/local_auth.dart'; +export 'network_auth/network_auth.dart'; diff --git a/lib/features/data_domain/auth/data/local_auth/data_source/data_source.dart b/lib/features/data_domain/auth/data/local_auth/data_source/data_source.dart new file mode 100644 index 0000000..2881cf4 --- /dev/null +++ b/lib/features/data_domain/auth/data/local_auth/data_source/data_source.dart @@ -0,0 +1 @@ +export 'local_auth_data_source.dart'; diff --git a/lib/features/data/auth/local_auth/data_source/local_auth_data_source.dart b/lib/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart similarity index 94% rename from lib/features/data/auth/local_auth/data_source/local_auth_data_source.dart rename to lib/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart index fc8aaa9..5fb7b08 100644 --- a/lib/features/data/auth/local_auth/data_source/local_auth_data_source.dart +++ b/lib/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:path_provider/path_provider.dart'; import 'package:spotify_downloader/core/consts/local_paths.dart'; -import 'package:spotify_downloader/features/data/auth/local_auth/models/local_auth_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart'; class LocalAuthDataSource { Future getLocalAuthCredentials() async { diff --git a/lib/features/data_domain/auth/data/local_auth/local_auth.dart b/lib/features/data_domain/auth/data/local_auth/local_auth.dart new file mode 100644 index 0000000..458d27b --- /dev/null +++ b/lib/features/data_domain/auth/data/local_auth/local_auth.dart @@ -0,0 +1,3 @@ +export 'data_source/data_source.dart'; +export 'models/models.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/data/auth/local_auth/models/local_auth_credentials.dart b/lib/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart similarity index 100% rename from lib/features/data/auth/local_auth/models/local_auth_credentials.dart rename to lib/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart diff --git a/lib/features/data_domain/auth/data/local_auth/models/models.dart b/lib/features/data_domain/auth/data/local_auth/models/models.dart new file mode 100644 index 0000000..801ab3b --- /dev/null +++ b/lib/features/data_domain/auth/data/local_auth/models/models.dart @@ -0,0 +1 @@ +export 'local_auth_credentials.dart'; diff --git a/lib/features/data_domain/auth/data/local_auth/repository/converter/converter.dart b/lib/features/data_domain/auth/data/local_auth/repository/converter/converter.dart new file mode 100644 index 0000000..b54722a --- /dev/null +++ b/lib/features/data_domain/auth/data/local_auth/repository/converter/converter.dart @@ -0,0 +1 @@ +export 'local_auth_credentials_to_auth_credentials_converter.dart'; diff --git a/lib/features/data/auth/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart b/lib/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart similarity index 87% rename from lib/features/data/auth/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart rename to lib/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart index 9f533c1..c9ce9bc 100644 --- a/lib/features/data/auth/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart +++ b/lib/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart @@ -1,6 +1,7 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/auth/local_auth/models/local_auth_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/full_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; + class LocalAuthCredentialsToAuthCredentialsConverter implements ValueConverter { diff --git a/lib/features/data/auth/local_auth/repository/local_auth_repository_impl.dart b/lib/features/data_domain/auth/data/local_auth/repository/local_auth_repository_impl.dart similarity index 80% rename from lib/features/data/auth/local_auth/repository/local_auth_repository_impl.dart rename to lib/features/data_domain/auth/data/local_auth/repository/local_auth_repository_impl.dart index 3b3ffaf..279672d 100644 --- a/lib/features/data/auth/local_auth/repository/local_auth_repository_impl.dart +++ b/lib/features/data_domain/auth/data/local_auth/repository/local_auth_repository_impl.dart @@ -1,14 +1,11 @@ import 'package:spotify_downloader/core/consts/spotify_client.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/auth/local_auth/data_source/local_auth_data_source.dart'; -import 'package:spotify_downloader/features/data/auth/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/full_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/user_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/repositories.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; class LocalAuthRepositoryImpl implements LocalFullAuthRepository, LocalClientAuthRepository, LocalUserAuthRepository { LocalAuthRepositoryImpl({required LocalAuthDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/auth/data/local_auth/repository/repository.dart b/lib/features/data_domain/auth/data/local_auth/repository/repository.dart new file mode 100644 index 0000000..38b23a7 --- /dev/null +++ b/lib/features/data_domain/auth/data/local_auth/repository/repository.dart @@ -0,0 +1,2 @@ +export 'converter/converter.dart'; +export 'local_auth_repository_impl.dart'; diff --git a/lib/features/data_domain/auth/data/network_auth/data_source/data_source.dart b/lib/features/data_domain/auth/data/network_auth/data_source/data_source.dart new file mode 100644 index 0000000..12affc7 --- /dev/null +++ b/lib/features/data_domain/auth/data/network_auth/data_source/data_source.dart @@ -0,0 +1 @@ +export 'network_auth_data_source.dart'; diff --git a/lib/features/data/auth/network_auth/data_source/network_auth_data_source.dart b/lib/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart similarity index 93% rename from lib/features/data/auth/network_auth/data_source/network_auth_data_source.dart rename to lib/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart index 7074c36..ba0c137 100644 --- a/lib/features/data/auth/network_auth/data_source/network_auth_data_source.dart +++ b/lib/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart @@ -5,7 +5,9 @@ import 'package:spotify_downloader/core/consts/spotify_client.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/auth/network_auth/models/auth_response.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/data/network_auth/models/auth_response.dart'; + class NetworkAuthDataSource { Future> authorizeUser(String clientId) async { diff --git a/lib/features/data/auth/network_auth/models/auth_response.dart b/lib/features/data_domain/auth/data/network_auth/models/auth_response.dart similarity index 100% rename from lib/features/data/auth/network_auth/models/auth_response.dart rename to lib/features/data_domain/auth/data/network_auth/models/auth_response.dart diff --git a/lib/features/data_domain/auth/data/network_auth/models/models.dart b/lib/features/data_domain/auth/data/network_auth/models/models.dart new file mode 100644 index 0000000..03c8201 --- /dev/null +++ b/lib/features/data_domain/auth/data/network_auth/models/models.dart @@ -0,0 +1 @@ +export 'auth_response.dart'; diff --git a/lib/features/data_domain/auth/data/network_auth/network_auth.dart b/lib/features/data_domain/auth/data/network_auth/network_auth.dart new file mode 100644 index 0000000..458d27b --- /dev/null +++ b/lib/features/data_domain/auth/data/network_auth/network_auth.dart @@ -0,0 +1,3 @@ +export 'data_source/data_source.dart'; +export 'models/models.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/data/auth/network_auth/repository/network_auth_repository_impl.dart b/lib/features/data_domain/auth/data/network_auth/repository/network_auth_repository_impl.dart similarity index 68% rename from lib/features/data/auth/network_auth/repository/network_auth_repository_impl.dart rename to lib/features/data_domain/auth/data/network_auth/repository/network_auth_repository_impl.dart index b376d61..2542791 100644 --- a/lib/features/data/auth/network_auth/repository/network_auth_repository_impl.dart +++ b/lib/features/data_domain/auth/data/network_auth/repository/network_auth_repository_impl.dart @@ -1,9 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/auth/network_auth/data_source/network_auth_data_source.dart'; -import 'package:spotify_downloader/features/domain/auth/network_auth/repository/network_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/user_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; class NetworkAuthRepositoryImpl implements NetworkAuthRepository { NetworkAuthRepositoryImpl({required NetworkAuthDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/auth/data/network_auth/repository/repository.dart b/lib/features/data_domain/auth/data/network_auth/repository/repository.dart new file mode 100644 index 0000000..d394df9 --- /dev/null +++ b/lib/features/data_domain/auth/data/network_auth/repository/repository.dart @@ -0,0 +1 @@ +export 'network_auth_repository_impl.dart'; diff --git a/lib/features/data_domain/auth/domain/domain.dart b/lib/features/data_domain/auth/domain/domain.dart new file mode 100644 index 0000000..46545f7 --- /dev/null +++ b/lib/features/data_domain/auth/domain/domain.dart @@ -0,0 +1,4 @@ +export 'local_auth/local_auth.dart'; +export 'network_auth/network_auth.dart'; +export 'service/service.dart'; +export 'shared/shared.dart'; diff --git a/lib/features/data_domain/auth/domain/local_auth/local_auth.dart b/lib/features/data_domain/auth/domain/local_auth/local_auth.dart new file mode 100644 index 0000000..3d91876 --- /dev/null +++ b/lib/features/data_domain/auth/domain/local_auth/local_auth.dart @@ -0,0 +1,2 @@ +export 'repositories/repositories.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart similarity index 77% rename from lib/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart rename to lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart index b4a2b89..b631825 100644 --- a/lib/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart +++ b/lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart @@ -1,7 +1,6 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; - +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; abstract class LocalClientAuthRepository { Future> getClientCredentials(); diff --git a/lib/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart similarity index 76% rename from lib/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart rename to lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart index 609b3a7..82c796a 100644 --- a/lib/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart +++ b/lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart @@ -1,6 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/full_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/full_credentials.dart'; abstract class LocalFullAuthRepository { diff --git a/lib/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart similarity index 76% rename from lib/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart rename to lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart index 2fefea6..61e77f6 100644 --- a/lib/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart +++ b/lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart @@ -1,6 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/user_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/user_credentials.dart'; abstract class LocalUserAuthRepository { Future> clearUserCredentials(); diff --git a/lib/features/data_domain/auth/domain/local_auth/repositories/repositories.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/repositories.dart new file mode 100644 index 0000000..dc94462 --- /dev/null +++ b/lib/features/data_domain/auth/domain/local_auth/repositories/repositories.dart @@ -0,0 +1,3 @@ +export 'local_client_auth_repository.dart'; +export 'local_full_auth_repository.dart'; +export 'local_user_auth_repository.dart'; diff --git a/lib/features/domain/auth/local_auth/use_cases/clear_user_credentials.dart b/lib/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart similarity index 82% rename from lib/features/domain/auth/local_auth/use_cases/clear_user_credentials.dart rename to lib/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart index 75113ad..301da60 100644 --- a/lib/features/domain/auth/local_auth/use_cases/clear_user_credentials.dart +++ b/lib/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart @@ -1,7 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart'; + class ClearUserCredentials implements UseCase { ClearUserCredentials({required LocalUserAuthRepository localUserAuthRepository}) diff --git a/lib/features/domain/auth/local_auth/use_cases/get_client_credentials.dart b/lib/features/data_domain/auth/domain/local_auth/use_cases/get_client_credentials.dart similarity index 73% rename from lib/features/domain/auth/local_auth/use_cases/get_client_credentials.dart rename to lib/features/data_domain/auth/domain/local_auth/use_cases/get_client_credentials.dart index 11bf26f..1494c02 100644 --- a/lib/features/domain/auth/local_auth/use_cases/get_client_credentials.dart +++ b/lib/features/data_domain/auth/domain/local_auth/use_cases/get_client_credentials.dart @@ -1,8 +1,10 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; + class GetClientCredentials implements UseCase { GetClientCredentials({required LocalClientAuthRepository localClientAuthRepository}) diff --git a/lib/features/domain/auth/local_auth/use_cases/save_client_credentials.dart b/lib/features/data_domain/auth/domain/local_auth/use_cases/save_client_credentials.dart similarity index 74% rename from lib/features/domain/auth/local_auth/use_cases/save_client_credentials.dart rename to lib/features/data_domain/auth/domain/local_auth/use_cases/save_client_credentials.dart index 283f8e2..e1fca7b 100644 --- a/lib/features/domain/auth/local_auth/use_cases/save_client_credentials.dart +++ b/lib/features/data_domain/auth/domain/local_auth/use_cases/save_client_credentials.dart @@ -1,8 +1,10 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; + class SaveClientCredentials implements UseCase { SaveClientCredentials({required LocalClientAuthRepository localClientAuthRepository}) diff --git a/lib/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart b/lib/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart new file mode 100644 index 0000000..aad2303 --- /dev/null +++ b/lib/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart @@ -0,0 +1,3 @@ +export 'clear_user_credentials.dart'; +export 'get_client_credentials.dart'; +export 'save_client_credentials.dart'; diff --git a/lib/features/data_domain/auth/domain/network_auth/network_auth.dart b/lib/features/data_domain/auth/domain/network_auth/network_auth.dart new file mode 100644 index 0000000..d64fe2b --- /dev/null +++ b/lib/features/data_domain/auth/domain/network_auth/network_auth.dart @@ -0,0 +1 @@ +export 'repository/network_auth_repository.dart'; diff --git a/lib/features/domain/auth/network_auth/repository/network_auth_repository.dart b/lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart similarity index 60% rename from lib/features/domain/auth/network_auth/repository/network_auth_repository.dart rename to lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart index 2875be9..ace8a8f 100644 --- a/lib/features/domain/auth/network_auth/repository/network_auth_repository.dart +++ b/lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/user_credentials.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; abstract class NetworkAuthRepository { Future> authorizeUser(ClientCredentials clientCredentials); diff --git a/lib/features/data_domain/auth/domain/network_auth/repository/repository.dart b/lib/features/data_domain/auth/domain/network_auth/repository/repository.dart new file mode 100644 index 0000000..a9485d6 --- /dev/null +++ b/lib/features/data_domain/auth/domain/network_auth/repository/repository.dart @@ -0,0 +1 @@ +export 'network_auth_repository.dart'; diff --git a/lib/features/data_domain/auth/domain/service/service.dart b/lib/features/data_domain/auth/domain/service/service.dart new file mode 100644 index 0000000..bc4300a --- /dev/null +++ b/lib/features/data_domain/auth/domain/service/service.dart @@ -0,0 +1,2 @@ +export 'service/service.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/domain/auth/service/service/auth_service.dart b/lib/features/data_domain/auth/domain/service/service/auth_service.dart similarity index 100% rename from lib/features/domain/auth/service/service/auth_service.dart rename to lib/features/data_domain/auth/domain/service/service/auth_service.dart diff --git a/lib/features/domain/auth/service/service/auth_service_impl.dart b/lib/features/data_domain/auth/domain/service/service/auth_service_impl.dart similarity index 75% rename from lib/features/domain/auth/service/service/auth_service_impl.dart rename to lib/features/data_domain/auth/domain/service/service/auth_service_impl.dart index 7a23654..9521ca1 100644 --- a/lib/features/domain/auth/service/service/auth_service_impl.dart +++ b/lib/features/data_domain/auth/domain/service/service/auth_service_impl.dart @@ -1,9 +1,10 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_user_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/network_auth/repository/network_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/auth/service/service/auth_service.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/repositories.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/service/service/auth_service.dart'; + class AuthServiceImpl implements AuthService { AuthServiceImpl( diff --git a/lib/features/data_domain/auth/domain/service/service/service.dart b/lib/features/data_domain/auth/domain/service/service/service.dart new file mode 100644 index 0000000..48c45d0 --- /dev/null +++ b/lib/features/data_domain/auth/domain/service/service/service.dart @@ -0,0 +1,2 @@ +export 'auth_service.dart'; +export 'auth_service_impl.dart'; diff --git a/lib/features/domain/auth/service/use_cases/authorize_user.dart b/lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart similarity index 82% rename from lib/features/domain/auth/service/use_cases/authorize_user.dart rename to lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart index 873aa4f..5e0a8a0 100644 --- a/lib/features/domain/auth/service/use_cases/authorize_user.dart +++ b/lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart @@ -1,7 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/auth/service/service/auth_service.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/domain/service/service/auth_service.dart'; class AuthorizeUser implements UseCase { AuthorizeUser({required AuthService authService}) : _authService = authService; diff --git a/lib/features/data_domain/auth/domain/service/use_cases/use_cases.dart b/lib/features/data_domain/auth/domain/service/use_cases/use_cases.dart new file mode 100644 index 0000000..974ede4 --- /dev/null +++ b/lib/features/data_domain/auth/domain/service/use_cases/use_cases.dart @@ -0,0 +1 @@ +export 'authorize_user.dart'; diff --git a/lib/features/domain/auth/shared/client_credentials.dart b/lib/features/data_domain/auth/domain/shared/client_credentials.dart similarity index 100% rename from lib/features/domain/auth/shared/client_credentials.dart rename to lib/features/data_domain/auth/domain/shared/client_credentials.dart diff --git a/lib/features/domain/auth/shared/full_credentials.dart b/lib/features/data_domain/auth/domain/shared/full_credentials.dart similarity index 69% rename from lib/features/domain/auth/shared/full_credentials.dart rename to lib/features/data_domain/auth/domain/shared/full_credentials.dart index e7363c0..e0c8488 100644 --- a/lib/features/domain/auth/shared/full_credentials.dart +++ b/lib/features/data_domain/auth/domain/shared/full_credentials.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/user_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/user_credentials.dart'; class FullCredentials implements UserCredentials, ClientCredentials { FullCredentials( diff --git a/lib/features/data_domain/auth/domain/shared/shared.dart b/lib/features/data_domain/auth/domain/shared/shared.dart new file mode 100644 index 0000000..702dd4d --- /dev/null +++ b/lib/features/data_domain/auth/domain/shared/shared.dart @@ -0,0 +1,3 @@ +export 'client_credentials.dart'; +export 'full_credentials.dart'; +export 'user_credentials.dart'; diff --git a/lib/features/domain/auth/shared/user_credentials.dart b/lib/features/data_domain/auth/domain/shared/user_credentials.dart similarity index 100% rename from lib/features/domain/auth/shared/user_credentials.dart rename to lib/features/data_domain/auth/domain/shared/user_credentials.dart diff --git a/lib/features/data_domain/settings/data/data.dart b/lib/features/data_domain/settings/data/data.dart new file mode 100644 index 0000000..458d27b --- /dev/null +++ b/lib/features/data_domain/settings/data/data.dart @@ -0,0 +1,3 @@ +export 'data_source/data_source.dart'; +export 'models/models.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/data_domain/settings/data/data_source/data_source.dart b/lib/features/data_domain/settings/data/data_source/data_source.dart new file mode 100644 index 0000000..8741366 --- /dev/null +++ b/lib/features/data_domain/settings/data/data_source/data_source.dart @@ -0,0 +1 @@ +export 'settings_data_source.dart'; diff --git a/lib/features/data/settings/data_source/settings_data_source.dart b/lib/features/data_domain/settings/data/data_source/settings_data_source.dart similarity index 94% rename from lib/features/data/settings/data_source/settings_data_source.dart rename to lib/features/data_domain/settings/data/data_source/settings_data_source.dart index 4ee1bf5..8b8223a 100644 --- a/lib/features/data/settings/data_source/settings_data_source.dart +++ b/lib/features/data_domain/settings/data/data_source/settings_data_source.dart @@ -5,7 +5,7 @@ import 'package:path_provider/path_provider.dart'; import 'package:spotify_downloader/core/consts/local_paths.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/settings/models/app_settings.dart'; +import 'package:spotify_downloader/features/data_domain/settings/data/models/app_settings.dart'; class SettingsDataSource { Future saveSettings(AppSettings appSettings) async { diff --git a/lib/features/data/settings/models/app_settings.dart b/lib/features/data_domain/settings/data/models/app_settings.dart similarity index 100% rename from lib/features/data/settings/models/app_settings.dart rename to lib/features/data_domain/settings/data/models/app_settings.dart diff --git a/lib/features/data_domain/settings/data/models/models.dart b/lib/features/data_domain/settings/data/models/models.dart new file mode 100644 index 0000000..cb251ef --- /dev/null +++ b/lib/features/data_domain/settings/data/models/models.dart @@ -0,0 +1 @@ +export 'app_settings.dart'; diff --git a/lib/features/data_domain/settings/data/repository/repository.dart b/lib/features/data_domain/settings/data/repository/repository.dart new file mode 100644 index 0000000..fab71d3 --- /dev/null +++ b/lib/features/data_domain/settings/data/repository/repository.dart @@ -0,0 +1 @@ +export 'settings_repository_impl.dart'; diff --git a/lib/features/data/settings/repository/settings_repository_impl.dart b/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart similarity index 82% rename from lib/features/data/settings/repository/settings_repository_impl.dart rename to lib/features/data_domain/settings/data/repository/settings_repository_impl.dart index e5a96f0..af627a4 100644 --- a/lib/features/data/settings/repository/settings_repository_impl.dart +++ b/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart @@ -1,11 +1,11 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/settings/data_source/settings_data_source.dart'; -import 'package:spotify_downloader/features/data/settings/models/app_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/download_tracks_settings_repository.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/data/data_source/settings_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/settings/data/models/app_settings.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; class SettingsRepositoryImpl implements DownloadTracksSettingsRepository, LanguageSettingsRepository { SettingsRepositoryImpl({required SettingsDataSource settingsDataSource}) : _settingsDataSource = settingsDataSource; diff --git a/lib/features/data_domain/settings/domain/domain.dart b/lib/features/data_domain/settings/domain/domain.dart new file mode 100644 index 0000000..31ef55f --- /dev/null +++ b/lib/features/data_domain/settings/domain/domain.dart @@ -0,0 +1,3 @@ +export 'enitities/enitities.dart'; +export 'repository/repository.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/domain/settings/enitities/download_tracks_settings.dart b/lib/features/data_domain/settings/domain/enitities/download_tracks_settings.dart similarity index 74% rename from lib/features/domain/settings/enitities/download_tracks_settings.dart rename to lib/features/data_domain/settings/domain/enitities/download_tracks_settings.dart index adb4810..ace143c 100644 --- a/lib/features/domain/settings/enitities/download_tracks_settings.dart +++ b/lib/features/data_domain/settings/domain/enitities/download_tracks_settings.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; class DownloadTracksSettings extends Equatable { const DownloadTracksSettings({required this.savePath, required this.saveMode}); diff --git a/lib/features/data_domain/settings/domain/enitities/enitities.dart b/lib/features/data_domain/settings/domain/enitities/enitities.dart new file mode 100644 index 0000000..94aaf7a --- /dev/null +++ b/lib/features/data_domain/settings/domain/enitities/enitities.dart @@ -0,0 +1,2 @@ +export 'download_tracks_settings.dart'; +export 'save_mode.dart'; diff --git a/lib/features/domain/settings/enitities/save_mode.dart b/lib/features/data_domain/settings/domain/enitities/save_mode.dart similarity index 100% rename from lib/features/domain/settings/enitities/save_mode.dart rename to lib/features/data_domain/settings/domain/enitities/save_mode.dart diff --git a/lib/features/domain/settings/repository/download_tracks_settings_repository.dart b/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart similarity index 76% rename from lib/features/domain/settings/repository/download_tracks_settings_repository.dart rename to lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart index 3cab120..0cc1b8c 100644 --- a/lib/features/domain/settings/repository/download_tracks_settings_repository.dart +++ b/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/download_tracks_settings.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; abstract class DownloadTracksSettingsRepository { Future> getDownloadTracksSettings(); diff --git a/lib/features/domain/settings/repository/language_settings_repository.dart b/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart similarity index 100% rename from lib/features/domain/settings/repository/language_settings_repository.dart rename to lib/features/data_domain/settings/domain/repository/language_settings_repository.dart diff --git a/lib/features/data_domain/settings/domain/repository/repository.dart b/lib/features/data_domain/settings/domain/repository/repository.dart new file mode 100644 index 0000000..15badc8 --- /dev/null +++ b/lib/features/data_domain/settings/domain/repository/repository.dart @@ -0,0 +1,2 @@ +export 'download_tracks_settings_repository.dart'; +export 'language_settings_repository.dart'; diff --git a/lib/features/domain/settings/use_cases/get_available_languages.dart b/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart similarity index 84% rename from lib/features/domain/settings/use_cases/get_available_languages.dart rename to lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart index 8774c3b..3b304ba 100644 --- a/lib/features/domain/settings/use_cases/get_available_languages.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; class GetAvailableLanguages implements UseCase, void> { GetAvailableLanguages({required LanguageSettingsRepository languageSettingsRepository}) diff --git a/lib/features/domain/settings/use_cases/get_download_tracks_settings.dart b/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart similarity index 75% rename from lib/features/domain/settings/use_cases/get_download_tracks_settings.dart rename to lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart index 086a1f9..ac2dc99 100644 --- a/lib/features/domain/settings/use_cases/get_download_tracks_settings.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart @@ -1,9 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/download_tracks_settings_repository.dart'; - +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; class GetDownloadTracksSettings implements UseCase { GetDownloadTracksSettings({required DownloadTracksSettingsRepository downloadTracksSettingsRepository}) : _downloadTracksSettingsRepository = downloadTracksSettingsRepository; diff --git a/lib/features/domain/settings/use_cases/get_language.dart b/lib/features/data_domain/settings/domain/use_cases/get_language.dart similarity index 83% rename from lib/features/domain/settings/use_cases/get_language.dart rename to lib/features/data_domain/settings/domain/use_cases/get_language.dart index df6b63e..2c942cb 100644 --- a/lib/features/domain/settings/use_cases/get_language.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_language.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; class GetLanguage implements UseCase { GetLanguage({required LanguageSettingsRepository languageSettingsRepository}) diff --git a/lib/features/domain/settings/use_cases/save_download_tracks_setting.dart b/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart similarity index 76% rename from lib/features/domain/settings/use_cases/save_download_tracks_setting.dart rename to lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart index 9da8123..1bba6cf 100644 --- a/lib/features/domain/settings/use_cases/save_download_tracks_setting.dart +++ b/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart @@ -1,8 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/download_tracks_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; + class SaveDownloadTracksSettings implements UseCase { SaveDownloadTracksSettings({required DownloadTracksSettingsRepository downloadTracksSettingsRepository}) diff --git a/lib/features/domain/settings/use_cases/save_language.dart b/lib/features/data_domain/settings/domain/use_cases/save_language.dart similarity index 83% rename from lib/features/domain/settings/use_cases/save_language.dart rename to lib/features/data_domain/settings/domain/use_cases/save_language.dart index 741ed12..ddfbec7 100644 --- a/lib/features/domain/settings/use_cases/save_language.dart +++ b/lib/features/data_domain/settings/domain/use_cases/save_language.dart @@ -1,7 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; + class SaveLanguage implements UseCase { SaveLanguage({required LanguageSettingsRepository languageSettingsRepository}) diff --git a/lib/features/data_domain/settings/domain/use_cases/use_cases.dart b/lib/features/data_domain/settings/domain/use_cases/use_cases.dart new file mode 100644 index 0000000..016cac4 --- /dev/null +++ b/lib/features/data_domain/settings/domain/use_cases/use_cases.dart @@ -0,0 +1,5 @@ +export 'get_available_languages.dart'; +export 'get_download_tracks_settings.dart'; +export 'get_language.dart'; +export 'save_download_tracks_setting.dart'; +export 'save_language.dart'; diff --git a/lib/features/data_domain/settings/settings.dart b/lib/features/data_domain/settings/settings.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/settings/settings.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/data/shared/converters/spotify_credentials_converter.dart b/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart similarity index 91% rename from lib/features/data/shared/converters/spotify_credentials_converter.dart rename to lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart index 36349ce..11e451c 100644 --- a/lib/features/data/shared/converters/spotify_credentials_converter.dart +++ b/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/consts/spotify_client.dart'; import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/full_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/full_credentials.dart'; class SpotifyCredentialsConverter implements ValueConverter { diff --git a/lib/features/data/shared/converters/spotify_requests_converter.dart b/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart similarity index 72% rename from lib/features/data/shared/converters/spotify_requests_converter.dart rename to lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart index 09a383c..4215c66 100644 --- a/lib/features/data/shared/converters/spotify_requests_converter.dart +++ b/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/shared/spotify_api_request.dart'; -import 'package:spotify_downloader/features/data/shared/converters/spotify_credentials_converter.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_credentials_converter.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; class SpotifyRequestsConverter implements ValueConverter { final SpotifyCredentialsConverter _credentialsConverter = SpotifyCredentialsConverter(); diff --git a/lib/features/data/shared/spotify_api_request.dart b/lib/features/data_domain/shared/data/spotify_api_request.dart similarity index 100% rename from lib/features/data/shared/spotify_api_request.dart rename to lib/features/data_domain/shared/data/spotify_api_request.dart diff --git a/lib/features/domain/shared/spotify_repository_request.dart b/lib/features/data_domain/shared/domain/spotify_repository_request.dart similarity index 69% rename from lib/features/domain/shared/spotify_repository_request.dart rename to lib/features/data_domain/shared/domain/spotify_repository_request.dart index 02935c9..5c216ed 100644 --- a/lib/features/domain/shared/spotify_repository_request.dart +++ b/lib/features/data_domain/shared/domain/spotify_repository_request.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/domain/auth/shared/full_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/full_credentials.dart'; class SpotifyRepositoryRequest { SpotifyRepositoryRequest({ diff --git a/lib/features/data_domain/spotify_profile/data/data.dart b/lib/features/data_domain/spotify_profile/data/data.dart new file mode 100644 index 0000000..ca62995 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/data/data.dart @@ -0,0 +1,2 @@ +export 'data_source/data_source.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/data_domain/spotify_profile/data/data_source/data_source.dart b/lib/features/data_domain/spotify_profile/data/data_source/data_source.dart new file mode 100644 index 0000000..2161a41 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/data/data_source/data_source.dart @@ -0,0 +1 @@ +export 'spotify_profile_data_source.dart'; diff --git a/lib/features/data/spotify_profile/data_source/spotify_profile_data_source.dart b/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart similarity index 88% rename from lib/features/data/spotify_profile/data_source/spotify_profile_data_source.dart rename to lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart index 8234181..5bd1044 100644 --- a/lib/features/data/spotify_profile/data_source/spotify_profile_data_source.dart +++ b/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart @@ -2,7 +2,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/util_methods.dart'; -import 'package:spotify_downloader/features/data/shared/spotify_api_request.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class SpotifyProfileDataSource { Future> getSpotifyProfile(SpotifyApiRequest spotifyApiRequest) async { diff --git a/lib/features/data_domain/spotify_profile/data/repository/repository.dart b/lib/features/data_domain/spotify_profile/data/repository/repository.dart new file mode 100644 index 0000000..b1147c1 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/data/repository/repository.dart @@ -0,0 +1 @@ +export 'spotify_profile_repository_impl.dart'; diff --git a/lib/features/data/spotify_profile/repository/spotify_profile_repository_impl.dart b/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart similarity index 62% rename from lib/features/data/spotify_profile/repository/spotify_profile_repository_impl.dart rename to lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart index b7fe0aa..e2ccafe 100644 --- a/lib/features/data/spotify_profile/repository/spotify_profile_repository_impl.dart +++ b/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart @@ -1,10 +1,10 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/shared/converters/spotify_requests_converter.dart'; -import 'package:spotify_downloader/features/data/spotify_profile/data_source/spotify_profile_data_source.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/repository/spotify_profile_repostitory.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; class SpotifyProfileRepositoryImpl implements SpotifyProfileRepository { SpotifyProfileRepositoryImpl({required SpotifyProfileDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/spotify_profile/domain/domain.dart b/lib/features/data_domain/spotify_profile/domain/domain.dart new file mode 100644 index 0000000..7eb32eb --- /dev/null +++ b/lib/features/data_domain/spotify_profile/domain/domain.dart @@ -0,0 +1,4 @@ +export 'entities/entities.dart'; +export 'repository/repository.dart'; +export 'service/service.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/data_domain/spotify_profile/domain/entities/entities.dart b/lib/features/data_domain/spotify_profile/domain/entities/entities.dart new file mode 100644 index 0000000..7232506 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/domain/entities/entities.dart @@ -0,0 +1 @@ +export 'spotify_profile.dart'; diff --git a/lib/features/domain/spotify_profile/entities/spotify_profile.dart b/lib/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart similarity index 100% rename from lib/features/domain/spotify_profile/entities/spotify_profile.dart rename to lib/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart diff --git a/lib/features/data_domain/spotify_profile/domain/repository/repository.dart b/lib/features/data_domain/spotify_profile/domain/repository/repository.dart new file mode 100644 index 0000000..30ac8c9 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/domain/repository/repository.dart @@ -0,0 +1 @@ +export 'spotify_profile_repostitory.dart'; diff --git a/lib/features/domain/spotify_profile/repository/spotify_profile_repostitory.dart b/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart similarity index 57% rename from lib/features/domain/spotify_profile/repository/spotify_profile_repostitory.dart rename to lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart index 393a8b2..9c1e9b4 100644 --- a/lib/features/domain/spotify_profile/repository/spotify_profile_repostitory.dart +++ b/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; abstract class SpotifyProfileRepository { Future> getSpotifyProfile(SpotifyRepositoryRequest spotifyClientRequest); diff --git a/lib/features/data_domain/spotify_profile/domain/service/service.dart b/lib/features/data_domain/spotify_profile/domain/service/service.dart new file mode 100644 index 0000000..533345e --- /dev/null +++ b/lib/features/data_domain/spotify_profile/domain/service/service.dart @@ -0,0 +1,2 @@ +export 'spotify_profile_service.dart'; +export 'spotify_profile_service_impl.dart'; diff --git a/lib/features/domain/spotify_profile/service/spotify_profile_service.dart b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart similarity index 68% rename from lib/features/domain/spotify_profile/service/spotify_profile_service.dart rename to lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart index 6313e1f..a49e05d 100644 --- a/lib/features/domain/spotify_profile/service/spotify_profile_service.dart +++ b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; abstract class SpotifyProfileService { Future> getSpotifyProfile(); diff --git a/lib/features/domain/spotify_profile/service/spotify_profile_service_impl.dart b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart similarity index 70% rename from lib/features/domain/spotify_profile/service/spotify_profile_service_impl.dart rename to lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart index 7004c4f..cfe04de 100644 --- a/lib/features/domain/spotify_profile/service/spotify_profile_service_impl.dart +++ b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart @@ -1,11 +1,11 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/repository/spotify_profile_repostitory.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/service/spotify_profile_service.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; class SpotifyProfileServiceImpl extends SpotifyProfileService { SpotifyProfileServiceImpl( diff --git a/lib/features/domain/spotify_profile/use_cases/get_spotify_profile.dart b/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart similarity index 72% rename from lib/features/domain/spotify_profile/use_cases/get_spotify_profile.dart rename to lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart index 55c8c24..0c6766f 100644 --- a/lib/features/domain/spotify_profile/use_cases/get_spotify_profile.dart +++ b/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart @@ -2,8 +2,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/service/spotify_profile_service.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; class GetSpotifyProfile implements UseCase { GetSpotifyProfile({required SpotifyProfileService spotifyProfileService}) diff --git a/lib/features/data_domain/spotify_profile/domain/use_cases/use_cases.dart b/lib/features/data_domain/spotify_profile/domain/use_cases/use_cases.dart new file mode 100644 index 0000000..cc8b410 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/domain/use_cases/use_cases.dart @@ -0,0 +1 @@ +export 'get_spotify_profile.dart'; diff --git a/lib/features/data_domain/spotify_profile/spotify_profile.dart b/lib/features/data_domain/spotify_profile/spotify_profile.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/spotify_profile/spotify_profile.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/data_domain/tracks/data/data.dart b/lib/features/data_domain/tracks/data/data.dart new file mode 100644 index 0000000..eb40df5 --- /dev/null +++ b/lib/features/data_domain/tracks/data/data.dart @@ -0,0 +1,4 @@ +export 'dowload_tracks/dowload_tracks.dart'; +export 'local_tracks/local_tracks.dart'; +export 'network_tracks/network_tracks.dart'; +export 'search_videos_by_track/search_videos_by_track.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/data_sources.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/data_sources.dart new file mode 100644 index 0000000..4ab1b86 --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/data_sources.dart @@ -0,0 +1 @@ +export 'dowload_audio_from_youtube_data_source.dart'; diff --git a/lib/features/data/tracks/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart similarity index 93% rename from lib/features/data/tracks/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart index f65f4dc..47c2915 100644 --- a/lib/features/data/tracks/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart @@ -14,10 +14,10 @@ import 'package:youtube_explode_dart/youtube_explode_dart.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/loading_stream/audio_loading_stream.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart'; class DownloadAudioFromYoutubeDataSource { DownloadAudioFromYoutubeDataSource( diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart new file mode 100644 index 0000000..791413d --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart @@ -0,0 +1 @@ +export 'audio_metadata_editor_impl.dart'; diff --git a/lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart similarity index 85% rename from lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart index b206513..75395b5 100644 --- a/lib/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart @@ -5,8 +5,8 @@ import 'package:metadata_god/metadata_god.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/metadata/audio_metadata.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; import 'package:http/http.dart' as http; class AudioMetadataEditorImpl implements AudioMetadataEditor { diff --git a/lib/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart similarity index 65% rename from lib/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart index 9ae97d2..5a9ab14 100644 --- a/lib/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart @@ -1,5 +1,5 @@ import 'package:ffmpeg_kit_flutter_full/ffmpeg_kit.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; class FFmpegFileToMp3Converter implements FileToMp3Converter { @override diff --git a/lib/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart similarity index 100% rename from lib/features/data/tracks/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/dowload_tracks.dart b/lib/features/data_domain/tracks/data/dowload_tracks/dowload_tracks.dart new file mode 100644 index 0000000..0b6f309 --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/dowload_tracks.dart @@ -0,0 +1,3 @@ +export 'data_sources/data_sources.dart'; +export 'models/models.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data/tracks/dowload_tracks/models/dowload_audio_from_youtube_args.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart similarity index 72% rename from lib/features/data/tracks/dowload_tracks/models/dowload_audio_from_youtube_args.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart index 1fd4070..d5743bf 100644 --- a/lib/features/data/tracks/dowload_tracks/models/dowload_audio_from_youtube_args.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/metadata/audio_metadata.dart'; +import 'metadata/audio_metadata.dart'; class DownloadAudioFromYoutubeArgs { DownloadAudioFromYoutubeArgs({ diff --git a/lib/features/data/tracks/dowload_tracks/models/loading_stream/audio_loading_stream.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart similarity index 100% rename from lib/features/data/tracks/dowload_tracks/models/loading_stream/audio_loading_stream.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/loading_stream.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/loading_stream.dart new file mode 100644 index 0000000..f3a0f6d --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/loading_stream.dart @@ -0,0 +1 @@ +export 'audio_loading_stream.dart'; diff --git a/lib/features/data/tracks/dowload_tracks/models/metadata/album_metadata.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart similarity index 100% rename from lib/features/data/tracks/dowload_tracks/models/metadata/album_metadata.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart diff --git a/lib/features/data/tracks/dowload_tracks/models/metadata/audio_metadata.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart similarity index 100% rename from lib/features/data/tracks/dowload_tracks/models/metadata/audio_metadata.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/metadata.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/metadata.dart new file mode 100644 index 0000000..68106a8 --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/metadata.dart @@ -0,0 +1,2 @@ +export 'album_metadata.dart'; +export 'audio_metadata.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/models.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/models.dart new file mode 100644 index 0000000..113f9ce --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/models/models.dart @@ -0,0 +1,3 @@ +export 'dowload_audio_from_youtube_args.dart'; +export 'loading_stream/loading_stream.dart'; +export 'metadata/metadata.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/converters.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/converters.dart new file mode 100644 index 0000000..a27596e --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/converters.dart @@ -0,0 +1 @@ +export 'track_to_audio_metadata_converter.dart'; diff --git a/lib/features/data/tracks/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart similarity index 67% rename from lib/features/data/tracks/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart index 0ae0576..caf0b5c 100644 --- a/lib/features/data/tracks/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/core/util/util_methods.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/metadata/album_metadata.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/metadata/audio_metadata.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class TrackToAudioMetadataConverter implements ValueConverter { @override diff --git a/lib/features/data/tracks/dowload_tracks/repositories/dowload_tracks_repository_impl.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart similarity index 81% rename from lib/features/data/tracks/dowload_tracks/repositories/dowload_tracks_repository_impl.dart rename to lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart index 4605c94..2b5d492 100644 --- a/lib/features/data/tracks/dowload_tracks/repositories/dowload_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart @@ -2,17 +2,17 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/cancellable_result.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart'; -import 'package:spotify_downloader/features/data/tracks/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_id.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; class DowloadTracksRepositoryImpl implements DownloadTracksRepository { DowloadTracksRepositoryImpl({required DownloadAudioFromYoutubeDataSource dowloadAudioFromYoutubeDataSource}) diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repositories.dart new file mode 100644 index 0000000..930e7e7 --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repositories.dart @@ -0,0 +1,3 @@ +export 'converters/converters.dart'; +export 'dowload_tracks_repository_impl.dart'; +export 'repository_impl_classes/repository_impl_classes.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart new file mode 100644 index 0000000..83560a5 --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart @@ -0,0 +1,12 @@ +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; + +class LoadingTrackInfo { + LoadingTrackInfo( + {required this.loadingTrackId, required this.audioLoadingStream, required this.trackLoadingNotifier}); + + final LoadingTrackId loadingTrackId; + AudioLoadingStream? audioLoadingStream; + TrackLoadingNotifier trackLoadingNotifier; +} diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/repository_impl_classes.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/repository_impl_classes.dart new file mode 100644 index 0000000..c2225a8 --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/repository_impl_classes.dart @@ -0,0 +1,2 @@ +export 'loading_track_info.dart'; +export 'waiting_in_loading_queue_track_info.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart new file mode 100644 index 0000000..47dc6ef --- /dev/null +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart @@ -0,0 +1,12 @@ +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; + +class WaitingInLoadingQueueTrackInfo { + WaitingInLoadingQueueTrackInfo( + {required this.loadingTrackId, required this.trackWithLazyYoutubeUrl, required this.trackLoadingNotifier}); + + final LoadingTrackId loadingTrackId; + final TrackWithLazyYoutubeUrl trackWithLazyYoutubeUrl; + final TrackLoadingNotifier trackLoadingNotifier; +} diff --git a/lib/features/data_domain/tracks/data/local_tracks/data_sources/data_sources.dart b/lib/features/data_domain/tracks/data/local_tracks/data_sources/data_sources.dart new file mode 100644 index 0000000..a2a5f8d --- /dev/null +++ b/lib/features/data_domain/tracks/data/local_tracks/data_sources/data_sources.dart @@ -0,0 +1 @@ +export 'local_tracks_data_source.dart'; diff --git a/lib/features/data/tracks/local_tracks/data_sources/local_tracks_data_source.dart b/lib/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart similarity index 88% rename from lib/features/data/tracks/local_tracks/data_sources/local_tracks_data_source.dart rename to lib/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart index bbd3805..7cfa7ee 100644 --- a/lib/features/data/tracks/local_tracks/data_sources/local_tracks_data_source.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/db/local_db.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_track_dto.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collection_dto_type.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collections_group_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; import 'package:sqflite/sqflite.dart'; class LocalTracksDataSource { diff --git a/lib/features/data_domain/tracks/data/local_tracks/local_tracks.dart b/lib/features/data_domain/tracks/data/local_tracks/local_tracks.dart new file mode 100644 index 0000000..0b6f309 --- /dev/null +++ b/lib/features/data_domain/tracks/data/local_tracks/local_tracks.dart @@ -0,0 +1,3 @@ +export 'data_sources/data_sources.dart'; +export 'models/models.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data/tracks/local_tracks/models/local_track_dto.dart b/lib/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart similarity index 69% rename from lib/features/data/tracks/local_tracks/models/local_track_dto.dart rename to lib/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart index 05a22df..0bd6daa 100644 --- a/lib/features/data/tracks/local_tracks/models/local_track_dto.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; class LocalTrackDto { LocalTrackDto( diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart b/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart new file mode 100644 index 0000000..502f095 --- /dev/null +++ b/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart @@ -0,0 +1,10 @@ +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; + +class LocalTracksCollectionDto { + LocalTracksCollectionDto({required this.group, required this.spotifyId, required this.type}); + + final String spotifyId; + final LocalTracksCollectionDtoType type; + final LocalTracksCollectionsGroupDto group; +} diff --git a/lib/features/data/tracks/local_tracks/models/local_tracks_collection_dto_type.dart b/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart similarity index 100% rename from lib/features/data/tracks/local_tracks/models/local_tracks_collection_dto_type.dart rename to lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart diff --git a/lib/features/data/tracks/local_tracks/models/local_tracks_collections_group_dto.dart b/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart similarity index 100% rename from lib/features/data/tracks/local_tracks/models/local_tracks_collections_group_dto.dart rename to lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/models.dart b/lib/features/data_domain/tracks/data/local_tracks/models/models.dart new file mode 100644 index 0000000..8805898 --- /dev/null +++ b/lib/features/data_domain/tracks/data/local_tracks/models/models.dart @@ -0,0 +1,4 @@ +export 'local_track_dto.dart'; +export 'local_tracks_collection_dto.dart'; +export 'local_tracks_collection_dto_type.dart'; +export 'local_tracks_collections_group_dto.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/converters.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/converters.dart new file mode 100644 index 0000000..5a141a8 --- /dev/null +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/converters.dart @@ -0,0 +1,4 @@ +export 'local_track_dto_to_local_track_converter.dart'; +export 'local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; +export 'local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart'; +export 'local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart'; diff --git a/lib/features/data/tracks/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart similarity index 69% rename from lib/features/data/tracks/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart rename to lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart index 9da2270..fd0254f 100644 --- a/lib/features/data/tracks/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_track_dto.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; class LocalTrackDtoToLocalTrackConverter implements ValueConverter { final LocalTracksCollectionDtoToLocalTracksCollectionConverter _collectionsConverter = diff --git a/lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart similarity index 74% rename from lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart rename to lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart index fe68a64..555ac30 100644 --- a/lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; import 'local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart'; diff --git a/lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart similarity index 85% rename from lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart rename to lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart index 8df8b6b..6718c4a 100644 --- a/lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collection_dto_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; class LocalTracksCollectionDtoTypeToLocalTracksCollectionTypeConverter implements ValueConverter { diff --git a/lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart similarity index 70% rename from lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart rename to lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart index b73dacf..6abfb7a 100644 --- a/lib/features/data/tracks/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/models/local_tracks_collections_group_dto.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_group.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; class LocalTracksCollectionsGroupDtoToLocalTracksCollectionsGroupConverter implements ValueConverter { @override diff --git a/lib/features/data/tracks/local_tracks/repositories/local_tracks_repository_impl.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart similarity index 69% rename from lib/features/data/tracks/local_tracks/repositories/local_tracks_repository_impl.dart rename to lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart index eb541de..3cdd1cf 100644 --- a/lib/features/data/tracks/local_tracks/repositories/local_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart @@ -1,11 +1,11 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/data_sources/local_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; class LocalTracksRepositoryImpl implements LocalTracksRepository { LocalTracksRepositoryImpl({required LocalTracksDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/repositories.dart new file mode 100644 index 0000000..200b327 --- /dev/null +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/repositories.dart @@ -0,0 +1,2 @@ +export 'converters/converters.dart'; +export 'local_tracks_repository_impl.dart'; diff --git a/lib/features/data_domain/tracks/data/network_tracks/data_sources/data_sources.dart b/lib/features/data_domain/tracks/data/network_tracks/data_sources/data_sources.dart new file mode 100644 index 0000000..c5320c0 --- /dev/null +++ b/lib/features/data_domain/tracks/data/network_tracks/data_sources/data_sources.dart @@ -0,0 +1 @@ +export 'network_tracks_data_source.dart'; diff --git a/lib/features/data/tracks/network_tracks/data_sources/network_tracks_data_source.dart b/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart similarity index 96% rename from lib/features/data/tracks/network_tracks/data_sources/network_tracks_data_source.dart rename to lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart index 041ae6c..e46eabe 100644 --- a/lib/features/data/tracks/network_tracks/data_sources/network_tracks_data_source.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart @@ -3,9 +3,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/isolate_pool/isolate_pool.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/util_methods.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/get_tracks_args.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/tracks_dto_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/tracks_getting_stream.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart'; class NetworkTracksDataSource { Future init() async { diff --git a/lib/features/data/tracks/network_tracks/models/get_tracks_args.dart b/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart similarity index 87% rename from lib/features/data/tracks/network_tracks/models/get_tracks_args.dart rename to lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart index a0451c7..fda4751 100644 --- a/lib/features/data/tracks/network_tracks/models/get_tracks_args.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart @@ -1,6 +1,6 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token.dart'; -import 'package:spotify_downloader/features/data/shared/spotify_api_request.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class GetTracksArgs { GetTracksArgs( diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/models.dart b/lib/features/data_domain/tracks/data/network_tracks/models/models.dart new file mode 100644 index 0000000..680fd53 --- /dev/null +++ b/lib/features/data_domain/tracks/data/network_tracks/models/models.dart @@ -0,0 +1,3 @@ +export 'get_tracks_args.dart'; +export 'tracks_dto_getting_ended_status.dart'; +export 'tracks_getting_stream.dart'; diff --git a/lib/features/data/tracks/network_tracks/models/tracks_dto_getting_ended_status.dart b/lib/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart similarity index 100% rename from lib/features/data/tracks/network_tracks/models/tracks_dto_getting_ended_status.dart rename to lib/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart diff --git a/lib/features/data/tracks/network_tracks/models/tracks_getting_stream.dart b/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart similarity index 70% rename from lib/features/data/tracks/network_tracks/models/tracks_getting_stream.dart rename to lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart index 2d0c72c..934cbf5 100644 --- a/lib/features/data/tracks/network_tracks/models/tracks_getting_stream.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/tracks_dto_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; class TracksGettingStream { Function(Result)? onEnded; diff --git a/lib/features/data_domain/tracks/data/network_tracks/network_tracks.dart b/lib/features/data_domain/tracks/data/network_tracks/network_tracks.dart new file mode 100644 index 0000000..0b6f309 --- /dev/null +++ b/lib/features/data_domain/tracks/data/network_tracks/network_tracks.dart @@ -0,0 +1,3 @@ +export 'data_sources/data_sources.dart'; +export 'models/models.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/converters.dart b/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/converters.dart new file mode 100644 index 0000000..419c9c6 --- /dev/null +++ b/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/converters.dart @@ -0,0 +1 @@ +export 'track_dto_to_track_converter.dart'; diff --git a/lib/features/data/tracks/network_tracks/repositories/converters/track_dto_to_track_converter.dart b/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart similarity index 78% rename from lib/features/data/tracks/network_tracks/repositories/converters/track_dto_to_track_converter.dart rename to lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart index 44bdeac..9418394 100644 --- a/lib/features/data/tracks/network_tracks/repositories/converters/track_dto_to_track_converter.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart @@ -1,8 +1,8 @@ import 'package:spotify/spotify.dart' as dto; import 'package:spotify_downloader/core/util/converters/converter_with_parameter.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/album.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart' as entity; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/album.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart' as entity; class TrackDtoToTrackConverter implements ConverterWithParameter { @override diff --git a/lib/features/data/tracks/network_tracks/repositories/network_tracks_repository_impl.dart b/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart similarity index 68% rename from lib/features/data/tracks/network_tracks/repositories/network_tracks_repository_impl.dart rename to lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart index 7ee1112..92af611 100644 --- a/lib/features/data/tracks/network_tracks/repositories/network_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart @@ -1,17 +1,17 @@ import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token_source.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/shared/converters/spotify_requests_converter.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/data_sources/network_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/get_tracks_args.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/tracks_dto_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/models/tracks_getting_stream.dart'; -import 'package:spotify_downloader/features/data/tracks/network_tracks/repositories/converters/track_dto_to_track_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; import 'package:spotify/spotify.dart' as dto; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart'; class NetworkTracksRepositoryImpl implements NetworkTracksRepository { NetworkTracksRepositoryImpl({ diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/data/network_tracks/repositories/repositories.dart new file mode 100644 index 0000000..2e19fc0 --- /dev/null +++ b/lib/features/data_domain/tracks/data/network_tracks/repositories/repositories.dart @@ -0,0 +1,2 @@ +export 'converters/converters.dart'; +export 'network_tracks_repository_impl.dart'; diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/data_sources.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/data_sources.dart new file mode 100644 index 0000000..231ea4c --- /dev/null +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/data_sources.dart @@ -0,0 +1 @@ +export 'search_video_on_youtube_data_source.dart'; diff --git a/lib/features/data/tracks/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart similarity index 100% rename from lib/features/data/tracks/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart rename to lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/converters.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/converters.dart new file mode 100644 index 0000000..f1ade3a --- /dev/null +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/converters.dart @@ -0,0 +1 @@ +export 'video_dto_to_video_converter.dart'; diff --git a/lib/features/data/tracks/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart similarity index 85% rename from lib/features/data/tracks/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart rename to lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart index 7fef4e6..980596e 100644 --- a/lib/features/data/tracks/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart @@ -1,7 +1,7 @@ // ignore_for_file: invalid_use_of_internal_member import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/entities/video.dart' as entity; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart' as entity; import 'package:youtube_explode_dart/youtube_explode_dart.dart' as model; class VideoDtoToVideoConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/repositories.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/repositories.dart new file mode 100644 index 0000000..d097419 --- /dev/null +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/repositories.dart @@ -0,0 +1,2 @@ +export 'converters/converters.dart'; +export 'search_videos_by_track_repository_impl.dart'; diff --git a/lib/features/data/tracks/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart similarity index 77% rename from lib/features/data/tracks/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart rename to lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart index 57cc137..c7c490b 100644 --- a/lib/features/data/tracks/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart @@ -1,10 +1,10 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class SearchVideosByTrackRepositoryImpl implements SearchVideosByTrackRepository { SearchVideosByTrackRepositoryImpl({required SearchVideoOnYoutubeDataSource searchVideoOnYoutubeDataSource}) @@ -86,13 +86,13 @@ class SearchVideosByTrackRepositoryImpl implements SearchVideosByTrackRepository videoRating++; } - if (track.duration != null && video.duration != null) { - const durationTolerance = 10; - if (video.duration!.inSeconds - durationTolerance <= track.duration!.inSeconds && - track.duration!.inSeconds <= video.duration!.inSeconds + durationTolerance) { - videoRating += 3; - } + if (track.duration != null && video.duration != null) { + const durationTolerance = 10; + if (video.duration!.inSeconds - durationTolerance <= track.duration!.inSeconds && + track.duration!.inSeconds <= video.duration!.inSeconds + durationTolerance) { + videoRating += 3; } + } return videoRating; } diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/search_videos_by_track.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/search_videos_by_track.dart new file mode 100644 index 0000000..e3893d4 --- /dev/null +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/search_videos_by_track.dart @@ -0,0 +1,2 @@ +export 'data_sources/data_sources.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data_domain/tracks/domain/domain.dart b/lib/features/data_domain/tracks/domain/domain.dart new file mode 100644 index 0000000..586c946 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/domain.dart @@ -0,0 +1,7 @@ +export 'download_tracks/download_tracks.dart'; +export 'local_tracks/local_tracks.dart'; +export 'network_tracks/network_tracks.dart'; +export 'observe_tracks_loading/observe_tracks_loading.dart'; +export 'search_videos_by_track/search_videos_by_track.dart'; +export 'services/services.dart'; +export 'shared/shared.dart'; diff --git a/lib/features/data_domain/tracks/domain/download_tracks/download_tracks.dart b/lib/features/data_domain/tracks/domain/download_tracks/download_tracks.dart new file mode 100644 index 0000000..09f4318 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/download_tracks/download_tracks.dart @@ -0,0 +1,2 @@ +export 'entities/entities.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/entities.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/entities.dart new file mode 100644 index 0000000..116cbfd --- /dev/null +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/entities.dart @@ -0,0 +1,5 @@ +export 'loading_track_id.dart'; +export 'loading_track_observer.dart'; +export 'loading_track_status.dart'; +export 'track_loading_notifier.dart'; +export 'track_with_lazy_youtube_url.dart'; diff --git a/lib/features/domain/tracks/download_tracks/entities/loading_track_id.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart similarity index 79% rename from lib/features/domain/tracks/download_tracks/entities/loading_track_id.dart rename to lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart index 1fbff13..3502502 100644 --- a/lib/features/domain/tracks/download_tracks/entities/loading_track_id.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; class LoadingTrackId extends Equatable { const LoadingTrackId({required this.parentSpotifyId, required this.parentType, required this.spotifyId, required this.savePath}); diff --git a/lib/features/domain/tracks/download_tracks/entities/loading_track_observer.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart similarity index 91% rename from lib/features/domain/tracks/download_tracks/entities/loading_track_observer.dart rename to lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart index 96c6521..f36d2c6 100644 --- a/lib/features/domain/tracks/download_tracks/entities/loading_track_observer.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; class LoadingTrackObserver { LoadingTrackObserver( diff --git a/lib/features/domain/tracks/download_tracks/entities/loading_track_status.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart similarity index 100% rename from lib/features/domain/tracks/download_tracks/entities/loading_track_status.dart rename to lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart diff --git a/lib/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart similarity index 91% rename from lib/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart rename to lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart index eb4cfdc..91b10f9 100644 --- a/lib/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; class TrackLoadingNotifier { final StreamController _startLoadingStreamController = StreamController(); diff --git a/lib/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart similarity index 87% rename from lib/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart rename to lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart index 00cdc2c..6d5d4ab 100644 --- a/lib/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class TrackWithLazyYoutubeUrl { TrackWithLazyYoutubeUrl({required this.track, required this.getYoutubeUrlFunction}); diff --git a/lib/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart b/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart similarity index 58% rename from lib/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart rename to lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart index e9044d1..0621ddd 100644 --- a/lib/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart @@ -2,9 +2,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; abstract class DownloadTracksRepository { Future> dowloadTrack(TrackWithLazyYoutubeUrl lazyTrack, String savePath); diff --git a/lib/features/data_domain/tracks/domain/download_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/domain/download_tracks/repositories/repositories.dart new file mode 100644 index 0000000..3a8a56f --- /dev/null +++ b/lib/features/data_domain/tracks/domain/download_tracks/repositories/repositories.dart @@ -0,0 +1 @@ +export 'dowload_tracks_repository.dart'; diff --git a/lib/features/data_domain/tracks/domain/local_tracks/entities/entities.dart b/lib/features/data_domain/tracks/domain/local_tracks/entities/entities.dart new file mode 100644 index 0000000..c39b2c5 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/local_tracks/entities/entities.dart @@ -0,0 +1,4 @@ +export 'local_track.dart'; +export 'local_tracks_collection.dart'; +export 'local_tracks_collection_group.dart'; +export 'local_tracks_collection_type.dart'; diff --git a/lib/features/domain/tracks/local_tracks/entities/local_track.dart b/lib/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart similarity index 68% rename from lib/features/domain/tracks/local_tracks/entities/local_track.dart rename to lib/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart index 0f9116e..755bcbc 100644 --- a/lib/features/domain/tracks/local_tracks/entities/local_track.dart +++ b/lib/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; class LocalTrack { LocalTrack({ diff --git a/lib/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart b/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart similarity index 66% rename from lib/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart rename to lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart index 995081b..3dc11ba 100644 --- a/lib/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart +++ b/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_group.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; class LocalTracksCollection { LocalTracksCollection({required this.group, required this.spotifyId, required this.type}); diff --git a/lib/features/domain/tracks/local_tracks/entities/local_tracks_collection_group.dart b/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart similarity index 100% rename from lib/features/domain/tracks/local_tracks/entities/local_tracks_collection_group.dart rename to lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart diff --git a/lib/features/domain/tracks/local_tracks/entities/local_tracks_collection_type.dart b/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart similarity index 100% rename from lib/features/domain/tracks/local_tracks/entities/local_tracks_collection_type.dart rename to lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart diff --git a/lib/features/data_domain/tracks/domain/local_tracks/local_tracks.dart b/lib/features/data_domain/tracks/domain/local_tracks/local_tracks.dart new file mode 100644 index 0000000..09f4318 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/local_tracks/local_tracks.dart @@ -0,0 +1,2 @@ +export 'entities/entities.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart b/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart similarity index 65% rename from lib/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart rename to lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart index 8a514f0..5e8dd19 100644 --- a/lib/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart +++ b/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; abstract class LocalTracksRepository { Future> getLocalTrack(LocalTracksCollection localTracksCollection, String spotifyId); diff --git a/lib/features/data_domain/tracks/domain/local_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/domain/local_tracks/repositories/repositories.dart new file mode 100644 index 0000000..f60ad79 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/local_tracks/repositories/repositories.dart @@ -0,0 +1 @@ +export 'local_tracks_repository.dart'; diff --git a/lib/features/data_domain/tracks/domain/network_tracks/entities/entities.dart b/lib/features/data_domain/tracks/domain/network_tracks/entities/entities.dart new file mode 100644 index 0000000..6a253d6 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/network_tracks/entities/entities.dart @@ -0,0 +1,3 @@ +export 'get_tracks_from_tracks_collection_args.dart'; +export 'tracks_getting_ended_status.dart'; +export 'tracks_getting_observer.dart'; diff --git a/lib/features/domain/tracks/network_tracks/entities/get_tracks_from_tracks_collection_args.dart b/lib/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart similarity index 58% rename from lib/features/domain/tracks/network_tracks/entities/get_tracks_from_tracks_collection_args.dart rename to lib/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart index eac2bd8..96e86ac 100644 --- a/lib/features/domain/tracks/network_tracks/entities/get_tracks_from_tracks_collection_args.dart +++ b/lib/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class GetTracksFromTracksCollectionArgs { GetTracksFromTracksCollectionArgs( diff --git a/lib/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart b/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart similarity index 100% rename from lib/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart rename to lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart diff --git a/lib/features/domain/tracks/network_tracks/entities/tracks_getting_observer.dart b/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart similarity index 54% rename from lib/features/domain/tracks/network_tracks/entities/tracks_getting_observer.dart rename to lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart index 8d201e2..a029d3e 100644 --- a/lib/features/domain/tracks/network_tracks/entities/tracks_getting_observer.dart +++ b/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class TracksGettingObserver { Function(Result)? onEnded; diff --git a/lib/features/data_domain/tracks/domain/network_tracks/network_tracks.dart b/lib/features/data_domain/tracks/domain/network_tracks/network_tracks.dart new file mode 100644 index 0000000..09f4318 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/network_tracks/network_tracks.dart @@ -0,0 +1,2 @@ +export 'entities/entities.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart b/lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart new file mode 100644 index 0000000..3a21e60 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart @@ -0,0 +1,6 @@ +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart'; + +abstract class NetworkTracksRepository { + Future getTracksFromTracksCollection(GetTracksFromTracksCollectionArgs args); +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/network_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/domain/network_tracks/repositories/repositories.dart new file mode 100644 index 0000000..0b4ee90 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/network_tracks/repositories/repositories.dart @@ -0,0 +1 @@ +export 'network_tracks_repository.dart'; diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/entities.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/entities.dart new file mode 100644 index 0000000..3579de7 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/entities.dart @@ -0,0 +1,2 @@ +export 'loading_tracks_collection/loading_tracks_collection.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart similarity index 62% rename from lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart index 240202e..6be5b84 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; class LoadingTrackObserverWithId { LoadingTrackObserverWithId({required this.loadingTrackObserver, required this.spotifyId}); diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection.dart new file mode 100644 index 0000000..cf15f32 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection.dart @@ -0,0 +1,5 @@ +export 'loading_track_observer_with_id.dart'; +export 'loading_tracks_collection_controller.dart'; +export 'loading_tracks_collection_info.dart'; +export 'loading_tracks_collection_observer.dart'; +export 'loading_tracks_collection_status.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart similarity index 84% rename from lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart index dd9f269..4e4ebea 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart @@ -1,9 +1,9 @@ import 'dart:async'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'loading_tracks_collection_info.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart similarity index 87% rename from lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart index 92c4a07..f2b60f9 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class LoadingTracksCollectionInfo extends Equatable { const LoadingTracksCollectionInfo( diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart similarity index 84% rename from lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart index 8bcbfa6..0cd0de2 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; import 'loading_tracks_collection_info.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart similarity index 100% rename from lib/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart new file mode 100644 index 0000000..4ca2792 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart @@ -0,0 +1,9 @@ +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart'; + +class LoadingTracksCollection { + LoadingTracksCollection({required this.id, required this.controller}); + + final LoadingTracksCollectionId id; + final LoadingTracksCollectionController controller; +} diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart similarity index 75% rename from lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart index bd57da1..7b6252e 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; class LoadingTracksCollectionId extends Equatable { const LoadingTracksCollectionId({required this.spotifyId, required this.tracksCollectionType}); diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart similarity index 76% rename from lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart index b7ca5f1..8aa3d10 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; class LoadingTracksCollectionsObserver { LoadingTracksCollectionsObserver( diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/repository.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/repository.dart new file mode 100644 index 0000000..29022de --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/repository.dart @@ -0,0 +1,3 @@ +export 'loading_tracks_collection.dart'; +export 'loading_tracks_collection_id.dart'; +export 'loading_tracks_collections_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/observe_tracks_loading.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/observe_tracks_loading.dart new file mode 100644 index 0000000..b5775f7 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/observe_tracks_loading.dart @@ -0,0 +1,3 @@ +export 'entities/entities.dart'; +export 'repository/repository.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart similarity index 55% rename from lib/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart index 7642118..2b3ad90 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; import '../entities/repository/loading_tracks_collections_observer.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart similarity index 63% rename from lib/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart index bf68078..728fb95 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart @@ -1,12 +1,12 @@ import 'dart:async'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; import '../entities/repository/loading_tracks_collections_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/repository.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/repository.dart new file mode 100644 index 0000000..ba89d0c --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/repository.dart @@ -0,0 +1,2 @@ +export 'observe_tracks_loading_repository.dart'; +export 'observe_tracks_loading_repository_impl.dart'; diff --git a/lib/features/domain/tracks/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart similarity index 70% rename from lib/features/domain/tracks/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart rename to lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart index cedc08d..c9bee3b 100644 --- a/lib/features/domain/tracks/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; class GetLoadingTracksCollectionsObserver implements UseCase { final ObserveTracksLoadingRepository _observeTracksLoading; diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/use_cases.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/use_cases.dart new file mode 100644 index 0000000..81503aa --- /dev/null +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/use_cases.dart @@ -0,0 +1 @@ +export 'get_loading_tracks_collections_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/entities/entities.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/entities/entities.dart new file mode 100644 index 0000000..703bc9c --- /dev/null +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/entities/entities.dart @@ -0,0 +1 @@ +export 'video.dart'; diff --git a/lib/features/domain/tracks/search_videos_by_track/entities/video.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart similarity index 100% rename from lib/features/domain/tracks/search_videos_by_track/entities/video.dart rename to lib/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/repositories.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/repositories.dart new file mode 100644 index 0000000..3b86fbc --- /dev/null +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/repositories.dart @@ -0,0 +1 @@ +export 'search_videos_by_track_repository.dart'; diff --git a/lib/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart similarity index 64% rename from lib/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart rename to lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart index 75d6dec..e9a2187 100644 --- a/lib/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; abstract class SearchVideosByTrackRepository { Future> findVideoByTrack(Track track); diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/search_videos_by_track.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/search_videos_by_track.dart new file mode 100644 index 0000000..cc16ca3 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/search_videos_by_track.dart @@ -0,0 +1,3 @@ +export 'entities/entities.dart'; +export 'repositories/repositories.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/domain/tracks/search_videos_by_track/use_cases/find_10_videos_by_track.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart similarity index 64% rename from lib/features/domain/tracks/search_videos_by_track/use_cases/find_10_videos_by_track.dart rename to lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart index 091c1b6..fe439bf 100644 --- a/lib/features/domain/tracks/search_videos_by_track/use_cases/find_10_videos_by_track.dart +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart @@ -1,9 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class Find10VideosByTrack implements UseCase, Track> { Find10VideosByTrack({required SearchVideosByTrackRepository searchVideosByTrackRepository}) diff --git a/lib/features/domain/tracks/search_videos_by_track/use_cases/get_video_by_url.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart similarity index 70% rename from lib/features/domain/tracks/search_videos_by_track/use_cases/get_video_by_url.dart rename to lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart index 6a58fff..4b608a9 100644 --- a/lib/features/domain/tracks/search_videos_by_track/use_cases/get_video_by_url.dart +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; class GetVideoByUrl implements UseCase { GetVideoByUrl({required SearchVideosByTrackRepository searchVideosByTrackRepository}) diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/use_cases.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/use_cases.dart new file mode 100644 index 0000000..e8b51eb --- /dev/null +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/use_cases.dart @@ -0,0 +1,2 @@ +export 'find_10_videos_by_track.dart'; +export 'get_video_by_url.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/entities/entities.dart b/lib/features/data_domain/tracks/domain/services/entities/entities.dart new file mode 100644 index 0000000..84730d5 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/services/entities/entities.dart @@ -0,0 +1,2 @@ +export 'track_with_loading_observer.dart'; +export 'tracks_with_loading_observer_getting_observer.dart'; diff --git a/lib/features/domain/tracks/services/entities/track_with_loading_observer.dart b/lib/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart similarity index 78% rename from lib/features/domain/tracks/services/entities/track_with_loading_observer.dart rename to lib/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart index 78b226a..3c83ca5 100644 --- a/lib/features/domain/tracks/services/entities/track_with_loading_observer.dart +++ b/lib/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class TrackWithLoadingObserver { TrackWithLoadingObserver({required this.track, LoadingTrackObserver? loadingObserver}) diff --git a/lib/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart b/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart similarity index 61% rename from lib/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart rename to lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart index 7598ca5..b7daca2 100644 --- a/lib/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart +++ b/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; class TracksWithLoadingObserverGettingObserver { TracksWithLoadingObserverGettingObserver({ diff --git a/lib/features/data_domain/tracks/domain/services/services.dart b/lib/features/data_domain/tracks/domain/services/services.dart new file mode 100644 index 0000000..a229d11 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/services/services.dart @@ -0,0 +1,3 @@ +export 'entities/entities.dart'; +export 'services/services.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart new file mode 100644 index 0000000..a286204 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart @@ -0,0 +1 @@ +export 'download_tracks_service_impl.dart'; diff --git a/lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart similarity index 69% rename from lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart rename to lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart index 8f4c220..137484f 100644 --- a/lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart @@ -1,25 +1,25 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/download_tracks_settings_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_loading_notifier.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/track_with_lazy_youtube_url.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_group.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/tools/save_path_generator.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class DownloadTracksServiceImpl implements DownloadTracksService { DownloadTracksServiceImpl( diff --git a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart new file mode 100644 index 0000000..eb81d71 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart @@ -0,0 +1 @@ +export 'get_tracks_service_impl.dart'; diff --git a/lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart similarity index 68% rename from lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart rename to lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart index 5fea326..8b3ea84 100644 --- a/lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart @@ -3,26 +3,26 @@ import 'dart:io'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart'; - -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; -import 'package:spotify_downloader/features/domain/settings/repository/download_tracks_settings_repository.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_group.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/tools/save_path_generator.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; + +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class GetTracksServiceImpl implements GetTracksService { GetTracksServiceImpl( diff --git a/lib/features/data_domain/tracks/domain/services/services/services.dart b/lib/features/data_domain/tracks/domain/services/services/services.dart new file mode 100644 index 0000000..9cdfae2 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/services/services/services.dart @@ -0,0 +1,2 @@ +export 'download_tracks_service/download_tracks_service.dart'; +export 'get_tracks_service/get_tracks_service.dart'; \ No newline at end of file diff --git a/lib/features/domain/tracks/services/services/tools/save_path_generator.dart b/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart similarity index 64% rename from lib/features/domain/tracks/services/services/tools/save_path_generator.dart rename to lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart index 6dcf542..47b07a1 100644 --- a/lib/features/domain/tracks/services/services/tools/save_path_generator.dart +++ b/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/util_methods.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; + +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; import 'package:path/path.dart' as p; class SavePathGenerator { diff --git a/lib/features/domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart b/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart similarity index 78% rename from lib/features/domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart rename to lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart index b913059..5625b73 100644 --- a/lib/features/domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart +++ b/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/local_tracks/entities/local_tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; class TracksCollectionTypeToLocalTracksCollectionTypeConverter implements ValueConverter { diff --git a/lib/features/domain/tracks/services/use_cases/cancel_track_loading.dart b/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart similarity index 71% rename from lib/features/domain/tracks/services/use_cases/cancel_track_loading.dart rename to lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart index b996d9f..e5aaaca 100644 --- a/lib/features/domain/tracks/services/use_cases/cancel_track_loading.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class CancelTrackLoading implements UseCase { CancelTrackLoading({required DownloadTracksService dowloadTracksService}) diff --git a/lib/features/domain/tracks/services/use_cases/download_track.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart similarity index 62% rename from lib/features/domain/tracks/services/use_cases/download_track.dart rename to lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart index 7699bf2..2c5f918 100644 --- a/lib/features/domain/tracks/services/use_cases/download_track.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart @@ -1,9 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class DownloadTrack implements UseCase { DownloadTrack({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; diff --git a/lib/features/domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart similarity index 71% rename from lib/features/domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart rename to lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart index b2590ec..9b81252 100644 --- a/lib/features/domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; class DownloadTracksFromGettingObserver implements UseCase { DownloadTracksFromGettingObserver({required DownloadTracksService downloadTracksService}) diff --git a/lib/features/domain/tracks/services/use_cases/download_tracks_range.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart similarity index 70% rename from lib/features/domain/tracks/services/use_cases/download_tracks_range.dart rename to lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart index 5e4188f..b0fecb6 100644 --- a/lib/features/domain/tracks/services/use_cases/download_tracks_range.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; class DownloadTracksRange implements UseCase> { DownloadTracksRange({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; diff --git a/lib/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart similarity index 67% rename from lib/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart rename to lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart index 7226854..5227616 100644 --- a/lib/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart @@ -1,9 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; class GetTracksWithLoadingObserverFromTracksCollection implements UseCase { diff --git a/lib/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart similarity index 69% rename from lib/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart rename to lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart index f5fd0fb..c50259e 100644 --- a/lib/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart @@ -1,9 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; class GetTracksWithLoadingObserverFromTracksCollectionWithOffset implements diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/use_cases.dart b/lib/features/data_domain/tracks/domain/services/use_cases/use_cases.dart new file mode 100644 index 0000000..a7cdc8c --- /dev/null +++ b/lib/features/data_domain/tracks/domain/services/use_cases/use_cases.dart @@ -0,0 +1,6 @@ +export 'cancel_track_loading.dart'; +export 'download_track.dart'; +export 'download_tracks_from_getting_observer.dart'; +export 'download_tracks_range.dart'; +export 'get_tracks_with_loading_observer_from_tracks_collection.dart'; +export 'get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; diff --git a/lib/features/domain/tracks/shared/entities/album.dart b/lib/features/data_domain/tracks/domain/shared/entities/album.dart similarity index 100% rename from lib/features/domain/tracks/shared/entities/album.dart rename to lib/features/data_domain/tracks/domain/shared/entities/album.dart diff --git a/lib/features/data_domain/tracks/domain/shared/entities/entities.dart b/lib/features/data_domain/tracks/domain/shared/entities/entities.dart new file mode 100644 index 0000000..12b6b66 --- /dev/null +++ b/lib/features/data_domain/tracks/domain/shared/entities/entities.dart @@ -0,0 +1,4 @@ +export 'album.dart'; +export 'track.dart'; +export 'tracks_collection.dart'; +export 'tracks_collection_type.dart'; diff --git a/lib/features/domain/tracks/shared/entities/track.dart b/lib/features/data_domain/tracks/domain/shared/entities/track.dart similarity index 68% rename from lib/features/domain/tracks/shared/entities/track.dart rename to lib/features/data_domain/tracks/domain/shared/entities/track.dart index efbfe0e..04649d1 100644 --- a/lib/features/domain/tracks/shared/entities/track.dart +++ b/lib/features/data_domain/tracks/domain/shared/entities/track.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/album.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/album.dart'; class Track { Track( diff --git a/lib/features/domain/tracks/shared/entities/tracks_collection.dart b/lib/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart similarity index 100% rename from lib/features/domain/tracks/shared/entities/tracks_collection.dart rename to lib/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart diff --git a/lib/features/domain/tracks/shared/entities/tracks_collection_type.dart b/lib/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart similarity index 100% rename from lib/features/domain/tracks/shared/entities/tracks_collection_type.dart rename to lib/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart diff --git a/lib/features/data_domain/tracks/domain/shared/shared.dart b/lib/features/data_domain/tracks/domain/shared/shared.dart new file mode 100644 index 0000000..506ac8a --- /dev/null +++ b/lib/features/data_domain/tracks/domain/shared/shared.dart @@ -0,0 +1 @@ +export 'entities/entities.dart'; diff --git a/lib/features/data_domain/tracks/tracks.dart b/lib/features/data_domain/tracks/tracks.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/tracks/tracks.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/data.dart b/lib/features/data_domain/tracks_collections/data/data.dart new file mode 100644 index 0000000..72625f5 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/data.dart @@ -0,0 +1,2 @@ +export 'history_tracks_collectons/history_tracks_collectons.dart'; +export 'network_tracks_collections/network_tracks_collections.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/data_source.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/data_source.dart new file mode 100644 index 0000000..29f0599 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/data_source.dart @@ -0,0 +1 @@ +export 'tracks_collectons_history_data_source.dart'; diff --git a/lib/features/data/tracks_collections/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart similarity index 93% rename from lib/features/data/tracks_collections/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart rename to lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart index a498c18..12eea40 100644 --- a/lib/features/data/tracks_collections/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart @@ -1,5 +1,5 @@ import 'package:spotify_downloader/core/db/local_db.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/models/history_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; import 'package:sqflite/sqflite.dart'; class TracksCollectonsHistoryDataSource { diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/history_tracks_collectons.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/history_tracks_collectons.dart new file mode 100644 index 0000000..6b0ad93 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/history_tracks_collectons.dart @@ -0,0 +1,3 @@ +export 'data_source/data_source.dart'; +export 'models/models.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data/tracks_collections/history_tracks_collectons/models/history_tracks_collection_dto.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart similarity index 100% rename from lib/features/data/tracks_collections/history_tracks_collectons/models/history_tracks_collection_dto.dart rename to lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/models.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/models.dart new file mode 100644 index 0000000..da8e642 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/models.dart @@ -0,0 +1 @@ +export 'history_tracks_collection_dto.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/converters.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/converters.dart new file mode 100644 index 0000000..ea309eb --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/converters.dart @@ -0,0 +1,3 @@ +export 'history_tracks_collections_converter.dart'; +export 'tracks_collection_to_history_tracks_collection_dto_converter.dart'; +export 'tracks_collection_types_converter.dart'; diff --git a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart similarity index 71% rename from lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart rename to lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart index f68c57d..360608b 100644 --- a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/models/history_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; class HistoryTracksCollectionsConverter implements ValueConverter { diff --git a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart similarity index 65% rename from lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart rename to lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart index 67be58b..ed18082 100644 --- a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/models/history_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class TracksCollectionToHistoryTracksCollectionDtoConverter implements ValueConverter { diff --git a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart similarity index 84% rename from lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart rename to lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart index 39878b3..a8e9f89 100644 --- a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/models/history_tracks_collection_dto.dart'; -import '../../../../../domain/tracks/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; +import '../../../../../tracks/domain/shared/entities/tracks_collection_type.dart'; class TracksCollectionTypesConverter implements ValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/repositories.dart new file mode 100644 index 0000000..b8ad391 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/repositories.dart @@ -0,0 +1,2 @@ +export 'converters/converters.dart'; +export 'tracks_collections_history_repository_impl.dart'; diff --git a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart similarity index 71% rename from lib/features/data/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart rename to lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart index 5d5f1ea..f20eb46 100644 --- a/lib/features/data/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart @@ -1,11 +1,11 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class TracksCollectionsHistoryRepositoryImpl implements TracksCollectionsHistoryRepository { TracksCollectionsHistoryRepositoryImpl({required TracksCollectonsHistoryDataSource dataSource}) diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/data_source.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/data_source.dart new file mode 100644 index 0000000..63878f4 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/data_source.dart @@ -0,0 +1 @@ +export 'network_tracks_collections_data_source.dart'; diff --git a/lib/features/data/tracks_collections/network_tracks_collections/data_source/network_tracks_collections_data_source.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart similarity index 94% rename from lib/features/data/tracks_collections/network_tracks_collections/data_source/network_tracks_collections_data_source.dart rename to lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart index 25f315a..ec38d9b 100644 --- a/lib/features/data/tracks_collections/network_tracks_collections/data_source/network_tracks_collections_data_source.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart @@ -2,7 +2,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/util_methods.dart'; -import 'package:spotify_downloader/features/data/shared/spotify_api_request.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class NetworkTracksCollectionsDataSource { Future> getPlaylistBySpotifyId( diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/network_tracks_collections.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/network_tracks_collections.dart new file mode 100644 index 0000000..d7086d3 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/network_tracks_collections.dart @@ -0,0 +1,2 @@ +export 'data_source/data_source.dart'; +export 'repositories/repositories.dart'; diff --git a/lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart similarity index 82% rename from lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart rename to lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart index a7b9ab7..266c606 100644 --- a/lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart @@ -2,8 +2,8 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/converters/result_converters/result_value_converter.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class AlbumDtoToTracksCollectionConverter implements ResultValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/converters.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/converters.dart new file mode 100644 index 0000000..0d05e26 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/converters.dart @@ -0,0 +1,3 @@ +export 'album_dto_to_tracks_collection_converter.dart'; +export 'playlist_dto_to_tracks_collection_converter.dart'; +export 'track_dto_to_tracks_collection_converter.dart'; diff --git a/lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart similarity index 82% rename from lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart rename to lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart index 2f223b5..e23b530 100644 --- a/lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart @@ -2,8 +2,8 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/converters/result_converters/result_value_converter.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class PlaylistDtoToTracksCollectionConverter implements ResultValueConverter { @override diff --git a/lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart similarity index 82% rename from lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart rename to lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart index 2e1bb8b..f0771b0 100644 --- a/lib/features/data/tracks_collections/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart @@ -2,8 +2,8 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/util/converters/result_converters/result_value_converter.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class TrackDtoToTracksCollectionConverter implements ResultValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/repositories.dart new file mode 100644 index 0000000..506198e --- /dev/null +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/repositories.dart @@ -0,0 +1,2 @@ +export 'converters/converters.dart'; +export 'tracks_collections_repository_impl.dart'; diff --git a/lib/features/data/tracks_collections/network_tracks_collections/repositories/tracks_collections_repository_impl.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart similarity index 73% rename from lib/features/data/tracks_collections/network_tracks_collections/repositories/tracks_collections_repository_impl.dart rename to lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart index 0be78b6..6adb490 100644 --- a/lib/features/data/tracks_collections/network_tracks_collections/repositories/tracks_collections_repository_impl.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart @@ -2,15 +2,15 @@ import 'dart:async'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data/shared/converters/spotify_requests_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/data/tracks_collections/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; class NetworkTracksCollectionsRepositoryImpl implements NetworkTracksCollectionsRepository { NetworkTracksCollectionsRepositoryImpl({required NetworkTracksCollectionsDataSource dataSource}) diff --git a/lib/features/data_domain/tracks_collections/domain/domain.dart b/lib/features/data_domain/tracks_collections/domain/domain.dart new file mode 100644 index 0000000..72625f5 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/domain.dart @@ -0,0 +1,2 @@ +export 'history_tracks_collectons/history_tracks_collectons.dart'; +export 'network_tracks_collections/network_tracks_collections.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/entities.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/entities.dart new file mode 100644 index 0000000..4117f92 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/entities.dart @@ -0,0 +1 @@ +export 'history_tracks_collection.dart'; diff --git a/lib/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart similarity index 84% rename from lib/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart rename to lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart index cc5478e..d0b1c2f 100644 --- a/lib/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; class HistoryTracksCollection extends Equatable { const HistoryTracksCollection({ diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/history_tracks_collectons.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/history_tracks_collectons.dart new file mode 100644 index 0000000..cc16ca3 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/history_tracks_collectons.dart @@ -0,0 +1,3 @@ +export 'entities/entities.dart'; +export 'repositories/repositories.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/repositories.dart new file mode 100644 index 0000000..86af883 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/repositories.dart @@ -0,0 +1 @@ +export 'tracks_collections_history_repository.dart'; diff --git a/lib/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart similarity index 65% rename from lib/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart rename to lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart index cf7013c..4486e2e 100644 --- a/lib/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; abstract class TracksCollectionsHistoryRepository { diff --git a/lib/features/domain/tracks_collections/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart similarity index 72% rename from lib/features/domain/tracks_collections/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart rename to lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart index 815f3e0..82f4e6c 100644 --- a/lib/features/domain/tracks_collections/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; class AddTracksCollectionToHistory implements UseCase { AddTracksCollectionToHistory({required TracksCollectionsHistoryRepository historyPlaylistsRepository}) diff --git a/lib/features/domain/tracks_collections/history_tracks_collectons/use_cases/get_ordered_history.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart similarity index 75% rename from lib/features/domain/tracks_collections/history_tracks_collectons/use_cases/get_ordered_history.dart rename to lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart index 3e8426b..9daf74f 100644 --- a/lib/features/domain/tracks_collections/history_tracks_collectons/use_cases/get_ordered_history.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart @@ -3,8 +3,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; class GetOrderedHistory implements UseCase?, Null> { GetOrderedHistory({required TracksCollectionsHistoryRepository historyPlaylistsRepository}) diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/use_cases.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/use_cases.dart new file mode 100644 index 0000000..c160921 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/use_cases.dart @@ -0,0 +1,2 @@ +export 'add_tracks_collection_to_history.dart'; +export 'get_ordered_history.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/network_tracks_collections.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/network_tracks_collections.dart new file mode 100644 index 0000000..8d13a5e --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/network_tracks_collections.dart @@ -0,0 +1,3 @@ +export 'repositories/repositories.dart'; +export 'service/service.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/domain/tracks_collections/network_tracks_collections/repositories/network_tracks_collections_repository.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart similarity index 60% rename from lib/features/domain/tracks_collections/network_tracks_collections/repositories/network_tracks_collections_repository.dart rename to lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart index 433f07d..af540f2 100644 --- a/lib/features/domain/tracks_collections/network_tracks_collections/repositories/network_tracks_collections_repository.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; abstract class NetworkTracksCollectionsRepository { Future> getTracksCollectionByTypeAndSpotifyId( diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/repositories.dart new file mode 100644 index 0000000..106003b --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/repositories.dart @@ -0,0 +1 @@ +export 'network_tracks_collections_repository.dart'; diff --git a/lib/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart similarity index 64% rename from lib/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart rename to lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart index 5425228..30275cd 100644 --- a/lib/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; abstract class NetworkTracksCollectionsService { Future> getTracksCollectionByTypeAndSpotifyId( diff --git a/lib/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service_impl.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart similarity index 70% rename from lib/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service_impl.dart rename to lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart index cc91d98..0fa1dfc 100644 --- a/lib/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service_impl.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart @@ -1,11 +1,11 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/repositories/local_full_auth_repository.dart'; -import 'package:spotify_downloader/features/domain/shared/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; class NetworkTracksCollectionsServiceImpl implements NetworkTracksCollectionsService { NetworkTracksCollectionsServiceImpl( diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/service.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/service.dart new file mode 100644 index 0000000..d11e1a6 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/service.dart @@ -0,0 +1,2 @@ +export 'network_tracks_collections_service.dart'; +export 'network_tracks_collections_service_impl.dart'; diff --git a/lib/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart similarity index 64% rename from lib/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart rename to lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart index 1ed8bc7..500a1a7 100644 --- a/lib/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart @@ -1,9 +1,9 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; class GetTracksCollectionByTypeAndSpotifyId implements UseCase { diff --git a/lib/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart similarity index 68% rename from lib/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart rename to lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart index 7bf145b..4fffd07 100644 --- a/lib/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; import 'package:spotify_downloader/core/util/use_case/use_case.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; class GetTracksCollectionByUrl implements UseCase { GetTracksCollectionByUrl({required NetworkTracksCollectionsService service}) : _service = service; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/use_cases.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/use_cases.dart new file mode 100644 index 0000000..139781a --- /dev/null +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/use_cases.dart @@ -0,0 +1,2 @@ +export 'get_tracks_collection_by_type_and_spotify_id.dart'; +export 'get_tracks_collection_by_url.dart'; diff --git a/lib/features/data_domain/tracks_collections/tracks_collections.dart b/lib/features/data_domain/tracks_collections/tracks_collections.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/tracks_collections.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart b/lib/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart deleted file mode 100644 index f23b490..0000000 --- a/lib/features/domain/tracks/network_tracks/repositories/network_tracks_repository.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_observer.dart'; - -abstract class NetworkTracksRepository { - Future getTracksFromTracksCollection(GetTracksFromTracksCollectionArgs args); -} \ No newline at end of file diff --git a/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection.dart b/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection.dart deleted file mode 100644 index 8ab35d5..0000000 --- a/lib/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart'; - -class LoadingTracksCollection { - LoadingTracksCollection({required this.id, required this.controller}); - - final LoadingTracksCollectionId id; - final LoadingTracksCollectionController controller; -} diff --git a/lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart deleted file mode 100644 index 055f829..0000000 --- a/lib/features/domain/tracks/services/services/download_tracks_service/download_tracks_service.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; - -abstract class DownloadTracksService { - Future> downloadTrack(Track track); - - Future> downloadTracksRange(List tracksWithLoadingObservers); - - Future> downloadTracksFromGettingObserver( - TracksWithLoadingObserverGettingObserver tracksWithLoadingObserverGettingObserver); - - Future> cancelTrackLoading(Track track); -} diff --git a/lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart b/lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart deleted file mode 100644 index 9648d80..0000000 --- a/lib/features/domain/tracks/services/services/get_tracks_service/get_tracks_service.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; - -abstract class GetTracksService { - Future> getTracksWithLoadingObserversFromTracksColleciton( - {required TracksCollection tracksCollection, required int offset}); -} \ No newline at end of file diff --git a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart index 267215f..72ce582 100644 --- a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart +++ b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart @@ -2,10 +2,10 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/search_videos_by_track/use_cases/get_video_by_url.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; part 'change_source_video_event.dart'; part 'change_source_video_state.dart'; diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 0f20919..741af1a 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -5,7 +5,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; import 'package:spotify_downloader/generated/l10n.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart index 49da413..ab4e993 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; part 'filter_tracks_event.dart'; part 'filter_tracks_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart index 0e6ec7d..0624caf 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart @@ -6,15 +6,15 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/download_tracks_range.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; part 'get_and_download_tracks_event.dart'; part 'get_and_download_tracks_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart index 15667cb..abf45ee 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart @@ -3,8 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; part 'get_tracks_collection_event.dart'; part 'get_tracks_collection_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart index 4c9309b..cee396d 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; class GetTracksCollectionByHistoryBloc extends GetTracksCollectionBloc { diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart index 5e16b9b..12cf804 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; class GetTracksCollectionByUrlBloc extends GetTracksCollectionBloc { diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 29bd563..f766a8a 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -9,7 +9,7 @@ import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; import 'package:spotify_downloader/core/util/util_methods.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart index fff84f1..05edaed 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart @@ -1,8 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; part 'download_track_info_event.dart'; part 'download_track_info_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart index de13095..4161d8d 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart @@ -8,7 +8,7 @@ import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart index 5a2907e..f19e944 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; part 'download_track_info_status_tile_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart index 94155d3..92426a3 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart @@ -6,7 +6,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; import 'package:spotify_downloader/generated/l10n.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart index 65294e0..067ba13 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart @@ -3,12 +3,12 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/use_cases/download_track.dart'; -import 'package:spotify_downloader/features/domain/tracks/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; part 'track_tile_event.dart'; part 'track_tile_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart index 7d2d7df..0c36cc0 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; diff --git a/lib/features/presentation/history/bloc/history_bloc.dart b/lib/features/presentation/history/bloc/history_bloc.dart index 394913c..9f5996a 100644 --- a/lib/features/presentation/history/bloc/history_bloc.dart +++ b/lib/features/presentation/history/bloc/history_bloc.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/use_cases/get_ordered_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart'; part 'history_event.dart'; part 'history_state.dart'; diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index a433190..21804bd 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/liked_tracks_tile.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart'; import 'package:spotify_downloader/features/presentation/shared/widgets/search_text_field.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart index 43ae1cc..623a8a8 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; part 'loading_tracks_collections_list_event.dart'; part 'loading_tracks_collections_list_state.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart index 0eb7bdd..594db9a 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart @@ -3,7 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart'; import 'package:spotify_downloader/generated/l10n.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart index 75e5cfb..133c6f5 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; part 'loading_tracks_collection_tile_state.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart index 95b73e8..9d082fe 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart @@ -5,8 +5,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks_collections/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; diff --git a/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart b/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart index 6119dfe..90659b6 100644 --- a/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart +++ b/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart @@ -3,10 +3,10 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/use_cases/clear_user_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/service/use_cases/authorize_user.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/domain/spotify_profile/use_cases/get_spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/service/use_cases/authorize_user.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart'; part 'account_auth_event.dart'; part 'account_auth_state.dart'; diff --git a/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart b/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart index 53b75d2..741ef13 100644 --- a/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart +++ b/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart @@ -2,9 +2,8 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/use_cases/get_client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/local_auth/use_cases/save_client_credentials.dart'; -import 'package:spotify_downloader/features/domain/auth/shared/client_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart'; +import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; part 'client_auth_event.dart'; part 'client_auth_state.dart'; diff --git a/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart b/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart index 221456d..62bfa78 100644 --- a/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart +++ b/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart @@ -2,10 +2,8 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_download_tracks_settings.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/save_download_tracks_setting.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/use_cases/use_cases.dart'; part 'download_tracks_settings_event.dart'; part 'download_tracks_settings_state.dart'; diff --git a/lib/features/presentation/settings/widgets/download_tracks_settings/view/download_tracks_settings_editor.dart b/lib/features/presentation/settings/widgets/download_tracks_settings/view/download_tracks_settings_editor.dart index a97defc..37fae60 100644 --- a/lib/features/presentation/settings/widgets/download_tracks_settings/view/download_tracks_settings_editor.dart +++ b/lib/features/presentation/settings/widgets/download_tracks_settings/view/download_tracks_settings_editor.dart @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/domain/settings/enitities/save_mode.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/setting_with_text_field.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/settings_group.dart'; diff --git a/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart b/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart index d4a0f45..4f98a32 100644 --- a/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart +++ b/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart @@ -2,9 +2,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_available_languages.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_language.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/save_language.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/use_cases/use_cases.dart'; part 'language_setting_event.dart'; part 'language_setting_state.dart'; diff --git a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart index c11efb4..cfae434 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/domain/tracks/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; import 'package:spotify_downloader/features/presentation/tracks_collections_loading_notifications/bloc_entities/tracks_collections_loading_info.dart'; part 'tracks_collections_loading_notifications_event.dart'; diff --git a/lib/main.dart b/lib/main.dart index 6797f00..2fe2be4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:metadata_god/metadata_god.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/permissions/requiring_permission_services_initializer.dart'; -import 'package:spotify_downloader/features/domain/settings/use_cases/get_language.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/use_cases/get_language.dart'; import 'core/app/spotify_downloader_app.dart'; Future main() async { From 08656572364cfafca8f08270831129cc6a60c4a6 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 1 Jun 2024 20:40:03 +1000 Subject: [PATCH 02/41] Changed the structure of the project 2 --- lib/features/data_domain/auth/data/data.dart | 2 +- .../auth/data/local_auth/local_auth.dart | 6 +++--- .../auth/data/network_auth/network_auth.dart | 6 +++--- .../audio_metadata_editor.dart | 8 +++++++- .../download_tracks_service.dart | 18 +++++++++++++++++- .../get_tracks_service/get_tracks_service.dart | 10 +++++++++- 6 files changed, 40 insertions(+), 10 deletions(-) diff --git a/lib/features/data_domain/auth/data/data.dart b/lib/features/data_domain/auth/data/data.dart index cee314b..a8ee62a 100644 --- a/lib/features/data_domain/auth/data/data.dart +++ b/lib/features/data_domain/auth/data/data.dart @@ -1,2 +1,2 @@ export 'local_auth/local_auth.dart'; -export 'network_auth/network_auth.dart'; +export 'network_auth/network_auth.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/auth/data/local_auth/local_auth.dart b/lib/features/data_domain/auth/data/local_auth/local_auth.dart index 458d27b..5f0c6e9 100644 --- a/lib/features/data_domain/auth/data/local_auth/local_auth.dart +++ b/lib/features/data_domain/auth/data/local_auth/local_auth.dart @@ -1,3 +1,3 @@ -export 'data_source/data_source.dart'; -export 'models/models.dart'; -export 'repository/repository.dart'; +export 'data_source/local_auth_data_source.dart'; +export 'models/local_auth_credentials.dart'; +export 'repository/local_auth_repository_impl.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/auth/data/network_auth/network_auth.dart b/lib/features/data_domain/auth/data/network_auth/network_auth.dart index 458d27b..fd42397 100644 --- a/lib/features/data_domain/auth/data/network_auth/network_auth.dart +++ b/lib/features/data_domain/auth/data/network_auth/network_auth.dart @@ -1,3 +1,3 @@ -export 'data_source/data_source.dart'; -export 'models/models.dart'; -export 'repository/repository.dart'; +export 'data_source/network_auth_data_source.dart'; +export 'models/auth_response.dart'; +export 'repository/network_auth_repository_impl.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart index 791413d..e2ec126 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart @@ -1 +1,7 @@ -export 'audio_metadata_editor_impl.dart'; +import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; + +abstract class AudioMetadataEditor { + Future> changeAudioMetadata({required String audioPath, required AudioMetadata audioMetadata}); +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart index a286204..4fcee25 100644 --- a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart +++ b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart @@ -1 +1,17 @@ -export 'download_tracks_service_impl.dart'; +import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; + +abstract class DownloadTracksService { + Future> downloadTrack(Track track); + + Future> downloadTracksRange(List tracksWithLoadingObservers); + + Future> downloadTracksFromGettingObserver( + TracksWithLoadingObserverGettingObserver tracksWithLoadingObserverGettingObserver); + + Future> cancelTrackLoading(Track track); +} diff --git a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart index eb81d71..df5579c 100644 --- a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart +++ b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart @@ -1 +1,9 @@ -export 'get_tracks_service_impl.dart'; +import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; + +abstract class GetTracksService { + Future> getTracksWithLoadingObserversFromTracksColleciton( + {required TracksCollection tracksCollection, required int offset}); +} \ No newline at end of file From 39a6f8b548d357e3c4060ab0d0d3d90a8464f34b Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 1 Jun 2024 22:28:28 +1000 Subject: [PATCH 03/41] Refactored utils and auth folder structure and export files --- .../converters/converter_with_parameter.dart | 5 ----- .../result_value_converter.dart | 6 ------ .../simple_converters/async_value_converter.dart | 3 --- .../simple_converters/value_converter.dart | 3 --- .../cancellation_token/cancellation_token.dart | 2 ++ .../cancellation_token_class.dart} | 2 +- .../cancellation_token_source.dart | 2 +- lib/core/utils/converters/abstract/abstract.dart | 1 + .../abstract/converter_with_parameter.dart | 2 +- .../base_value_converter.dart | 0 .../base_value_converter.dart.dart | 1 + lib/core/utils/converters/converters.dart | 4 ++++ .../result_converters/result_converters.dart | 1 + .../result_value_converter.dart | 6 ++++++ .../simple_converters/async_value_converter.dart | 3 +++ .../simple_converters/simple_converters.dart | 2 ++ .../simple_converters/value_converter.dart | 3 +++ .../failures/custom_failures.dart} | 2 +- lib/core/{util => utils}/failures/failure.dart | 0 lib/core/utils/failures/failures.dart | 2 ++ .../isolate_pool/cancellable_compute.dart | 0 .../isolate_pool/cancellable_stream.dart | 0 lib/core/utils/isolate_pool/isolate_pool.dart | 4 ++++ .../isolate_pool/isolate_pool_class.dart} | 8 +------- .../isolate_pool_was_closed_exception.dart | 0 .../result/cancellable_result.dart | 0 lib/core/utils/result/result.dart | 2 ++ .../result/result_class.dart} | 2 +- lib/core/{util => utils}/use_case/use_case.dart | 2 +- lib/core/{util => utils}/util_methods.dart | 4 +--- lib/core/utils/utils.dart | 7 +++++++ lib/features/data_domain/auth/auth.dart | 6 ++++-- lib/features/data_domain/auth/data/data.dart | 2 -- .../auth/data/local_auth/local_auth.dart | 3 --- .../auth/data/network_auth/network_auth.dart | 3 --- lib/features/data_domain/auth/domain/domain.dart | 4 ---- .../local_client_auth_repository.dart | 8 -------- .../repositories/local_full_auth_repository.dart | 11 ----------- .../repositories/local_user_auth_repository.dart | 10 ---------- .../auth/domain/network_auth/network_auth.dart | 1 - .../repository/network_auth_repository.dart | 8 -------- .../domain/service/service/auth_service.dart | 6 ------ .../domain/service/use_cases/authorize_user.dart | 16 ---------------- .../data_domain/auth/local_auth/data/data.dart | 3 +++ .../data}/data_source/data_source.dart | 0 .../data_source/local_auth_data_source.dart | 2 +- .../data}/models/local_auth_credentials.dart | 0 .../data}/models/models.dart | 0 .../data}/repository/converter/converter.dart | 0 ...redentials_to_auth_credentials_converter.dart | 9 ++++----- .../repository/local_auth_repository_impl.dart | 9 ++------- .../data}/repository/repository.dart | 0 .../domain/domain.dart} | 0 .../auth/local_auth/domain/local_auth.dart | 2 ++ .../local_client_auth_repository.dart | 8 ++++++++ .../repositories/local_full_auth_repository.dart | 10 ++++++++++ .../repositories/local_user_auth_repository.dart | 9 +++++++++ .../domain}/repositories/repositories.dart | 0 .../use_cases/clear_user_credentials.dart | 8 ++------ .../use_cases/get_client_credentials.dart | 10 +++------- .../use_cases/save_client_credentials.dart | 10 +++------- .../domain}/use_cases/use_cases.dart | 0 .../data_domain/auth/local_auth/local_auth.dart | 2 ++ .../local_client_auth_repository.dart | 8 ++++++++ .../repositories/local_full_auth_repository.dart | 11 +++++++++++ .../repositories/local_user_auth_repository.dart | 10 ++++++++++ .../data_domain/auth/network_auth/data/data.dart | 3 +++ .../data}/data_source/data_source.dart | 0 .../data_source/network_auth_data_source.dart | 8 ++------ .../data}/models/auth_response.dart | 0 .../data}/models/models.dart | 0 .../repository/network_auth_repository_impl.dart | 9 +++------ .../data}/repository/repository.dart | 0 .../auth/network_auth/domain/domain.dart | 1 + .../repository/network_auth_repository.dart | 8 ++++++++ .../domain}/repository/repository.dart | 0 .../auth/network_auth/network_auth.dart | 2 ++ .../auth/{domain => }/service/service.dart | 0 .../auth/service/service/auth_service.dart | 6 ++++++ .../service/service/auth_service_impl.dart | 10 +++------- .../{domain => }/service/service/service.dart | 0 .../auth/service/use_cases/authorize_user.dart | 13 +++++++++++++ .../service/use_cases/use_cases.dart | 0 .../{domain => }/shared/client_credentials.dart | 0 .../{domain => }/shared/full_credentials.dart | 4 ++-- .../auth/{domain => }/shared/shared.dart | 0 .../{domain => }/shared/user_credentials.dart | 0 .../data/data_source/settings_data_source.dart | 4 ++-- .../repository/settings_repository_impl.dart | 4 ++-- .../download_tracks_settings_repository.dart | 4 ++-- .../repository/language_settings_repository.dart | 4 ++-- .../use_cases/get_available_languages.dart | 6 +++--- .../use_cases/get_download_tracks_settings.dart | 6 +++--- .../settings/domain/use_cases/get_language.dart | 6 +++--- .../use_cases/save_download_tracks_setting.dart | 6 +++--- .../settings/domain/use_cases/save_language.dart | 6 +++--- .../spotify_credentials_converter.dart | 4 ++-- .../converters/spotify_requests_converter.dart | 2 +- .../domain/spotify_repository_request.dart | 2 +- .../data_source/spotify_profile_data_source.dart | 6 +++--- .../spotify_profile_repository_impl.dart | 4 ++-- .../repository/spotify_profile_repostitory.dart | 4 ++-- .../domain/service/spotify_profile_service.dart | 4 ++-- .../service/spotify_profile_service_impl.dart | 8 ++++---- .../domain/use_cases/get_spotify_profile.dart | 6 +++--- .../dowload_audio_from_youtube_data_source.dart | 12 ++++++------ .../audio_metadata_editor.dart | 4 ++-- .../audio_metadata_editor_impl.dart | 6 +++--- .../loading_stream/audio_loading_stream.dart | 4 ++-- .../track_to_audio_metadata_converter.dart | 4 ++-- .../dowload_tracks_repository_impl.dart | 8 ++++---- ...local_track_dto_to_local_track_converter.dart | 2 +- ...dto_to_local_tracks_collection_converter.dart | 2 +- ...o_local_tracks_collection_type_converter.dart | 2 +- ...local_tracks_collections_group_converter.dart | 2 +- .../local_tracks_repository_impl.dart | 4 ++-- .../data_sources/network_tracks_data_source.dart | 8 ++++---- .../network_tracks/models/get_tracks_args.dart | 2 +- .../models/tracks_getting_stream.dart | 4 ++-- .../converters/track_dto_to_track_converter.dart | 2 +- .../network_tracks_repository_impl.dart | 4 ++-- .../search_video_on_youtube_data_source.dart | 8 ++++---- .../converters/video_dto_to_video_converter.dart | 2 +- .../search_videos_by_track_repository_impl.dart | 4 ++-- .../entities/loading_track_observer.dart | 2 +- .../entities/track_loading_notifier.dart | 2 +- .../entities/track_with_lazy_youtube_url.dart | 4 ++-- .../repositories/dowload_tracks_repository.dart | 4 ++-- .../repositories/local_tracks_repository.dart | 4 ++-- .../entities/tracks_getting_observer.dart | 4 ++-- .../get_loading_tracks_collections_observer.dart | 6 +++--- .../search_videos_by_track_repository.dart | 4 ++-- .../use_cases/find_10_videos_by_track.dart | 6 +++--- .../use_cases/get_video_by_url.dart | 6 +++--- ...s_with_loading_observer_getting_observer.dart | 4 ++-- .../download_tracks_service.dart | 4 ++-- .../download_tracks_service_impl.dart | 6 +++--- .../get_tracks_service/get_tracks_service.dart | 4 ++-- .../get_tracks_service_impl.dart | 6 +++--- .../services/tools/save_path_generator.dart | 2 +- ...o_local_tracks_collection_type_converter.dart | 2 +- .../services/use_cases/cancel_track_loading.dart | 6 +++--- .../services/use_cases/download_track.dart | 6 +++--- .../download_tracks_from_getting_observer.dart | 6 +++--- .../use_cases/download_tracks_range.dart | 6 +++--- ..._loading_observer_from_tracks_collection.dart | 6 +++--- ...erver_from_tracks_collection_with_offset.dart | 6 +++--- .../history_tracks_collections_converter.dart | 2 +- ..._history_tracks_collection_dto_converter.dart | 2 +- .../tracks_collection_types_converter.dart | 2 +- ...acks_collections_history_repository_impl.dart | 4 ++-- .../network_tracks_collections_data_source.dart | 6 +++--- ...album_dto_to_tracks_collection_converter.dart | 6 +++--- ...ylist_dto_to_tracks_collection_converter.dart | 6 +++--- ...track_dto_to_tracks_collection_converter.dart | 6 +++--- .../tracks_collections_repository_impl.dart | 6 +++--- .../tracks_collections_history_repository.dart | 4 ++-- .../add_tracks_collection_to_history.dart | 6 +++--- .../use_cases/get_ordered_history.dart | 6 +++--- .../network_tracks_collections_repository.dart | 4 ++-- .../network_tracks_collections_service.dart | 4 ++-- .../network_tracks_collections_service_impl.dart | 6 +++--- ...tracks_collection_by_type_and_spotify_id.dart | 6 +++--- .../use_cases/get_tracks_collection_by_url.dart | 6 +++--- .../bloc/change_source_video_bloc.dart | 4 ++-- .../get_and_download_tracks_bloc.dart | 6 +++--- .../base/get_tracks_collection_bloc.dart | 6 +++--- .../get_tracks_collection_by_history_bloc.dart | 4 ++-- .../get_tracks_collection_by_url_bloc.dart | 4 ++-- .../view/download_tracks_collection_screen.dart | 6 +++--- .../download_track_info_status_tile_cubit.dart | 2 +- .../view/download_track_info_status_tile.dart | 2 +- .../widgets/gradient_app_bar_with_opacity.dart | 2 +- .../widgets/track_tile/bloc/track_tile_bloc.dart | 2 +- .../loading_tracks_collections_list_bloc.dart | 2 +- .../blocs/account_auth/account_auth_bloc.dart | 8 ++++---- .../blocs/client_auth/client_auth_bloc.dart | 6 +++--- .../auth_settings/view/auth_settings.dart | 2 +- .../bloc/download_tracks_settings_bloc.dart | 2 +- .../bloc/language_setting_bloc.dart | 2 +- ...s_collections_loading_notifications_bloc.dart | 2 +- 181 files changed, 381 insertions(+), 371 deletions(-) delete mode 100644 lib/core/util/converters/converter_with_parameter.dart delete mode 100644 lib/core/util/converters/result_converters/result_value_converter.dart delete mode 100644 lib/core/util/converters/simple_converters/async_value_converter.dart delete mode 100644 lib/core/util/converters/simple_converters/value_converter.dart create mode 100644 lib/core/utils/cancellation_token/cancellation_token.dart rename lib/core/{util/cancellation_token/cancellation_token.dart => utils/cancellation_token/cancellation_token_class.dart} (75%) rename lib/core/{util => utils}/cancellation_token/cancellation_token_source.dart (69%) create mode 100644 lib/core/utils/converters/abstract/abstract.dart rename lib/core/{util => utils}/converters/abstract/converter_with_parameter.dart (50%) rename lib/core/{util => utils}/converters/base_value_converter.dart/base_value_converter.dart (100%) create mode 100644 lib/core/utils/converters/base_value_converter.dart/base_value_converter.dart.dart create mode 100644 lib/core/utils/converters/converters.dart create mode 100644 lib/core/utils/converters/result_converters/result_converters.dart create mode 100644 lib/core/utils/converters/result_converters/result_value_converter.dart create mode 100644 lib/core/utils/converters/simple_converters/async_value_converter.dart create mode 100644 lib/core/utils/converters/simple_converters/simple_converters.dart create mode 100644 lib/core/utils/converters/simple_converters/value_converter.dart rename lib/core/{util/failures/failures.dart => utils/failures/custom_failures.dart} (92%) rename lib/core/{util => utils}/failures/failure.dart (100%) create mode 100644 lib/core/utils/failures/failures.dart rename lib/core/{util => utils}/isolate_pool/cancellable_compute.dart (100%) rename lib/core/{util => utils}/isolate_pool/cancellable_stream.dart (100%) create mode 100644 lib/core/utils/isolate_pool/isolate_pool.dart rename lib/core/{util/isolate_pool/isolate_pool.dart => utils/isolate_pool/isolate_pool_class.dart} (88%) rename lib/core/{util => utils}/isolate_pool/isolate_pool_was_closed_exception.dart (100%) rename lib/core/{util => utils}/result/cancellable_result.dart (100%) create mode 100644 lib/core/utils/result/result.dart rename lib/core/{util/result/result.dart => utils/result/result_class.dart} (99%) rename lib/core/{util => utils}/use_case/use_case.dart (60%) rename lib/core/{util => utils}/util_methods.dart (89%) create mode 100644 lib/core/utils/utils.dart delete mode 100644 lib/features/data_domain/auth/data/data.dart delete mode 100644 lib/features/data_domain/auth/data/local_auth/local_auth.dart delete mode 100644 lib/features/data_domain/auth/data/network_auth/network_auth.dart delete mode 100644 lib/features/data_domain/auth/domain/domain.dart delete mode 100644 lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart delete mode 100644 lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart delete mode 100644 lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart delete mode 100644 lib/features/data_domain/auth/domain/network_auth/network_auth.dart delete mode 100644 lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart delete mode 100644 lib/features/data_domain/auth/domain/service/service/auth_service.dart delete mode 100644 lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart create mode 100644 lib/features/data_domain/auth/local_auth/data/data.dart rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/data_source/data_source.dart (100%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/data_source/local_auth_data_source.dart (94%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/models/local_auth_credentials.dart (100%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/models/models.dart (100%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/repository/converter/converter.dart (100%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart (74%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/repository/local_auth_repository_impl.dart (84%) rename lib/features/data_domain/auth/{data/local_auth => local_auth/data}/repository/repository.dart (100%) rename lib/features/data_domain/auth/{domain/local_auth/local_auth.dart => local_auth/domain/domain.dart} (100%) create mode 100644 lib/features/data_domain/auth/local_auth/domain/local_auth.dart create mode 100644 lib/features/data_domain/auth/local_auth/domain/repositories/local_client_auth_repository.dart create mode 100644 lib/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart create mode 100644 lib/features/data_domain/auth/local_auth/domain/repositories/local_user_auth_repository.dart rename lib/features/data_domain/auth/{domain/local_auth => local_auth/domain}/repositories/repositories.dart (100%) rename lib/features/data_domain/auth/{domain/local_auth => local_auth/domain}/use_cases/clear_user_credentials.dart (54%) rename lib/features/data_domain/auth/{domain/local_auth => local_auth/domain}/use_cases/get_client_credentials.dart (50%) rename lib/features/data_domain/auth/{domain/local_auth => local_auth/domain}/use_cases/save_client_credentials.dart (52%) rename lib/features/data_domain/auth/{domain/local_auth => local_auth/domain}/use_cases/use_cases.dart (100%) create mode 100644 lib/features/data_domain/auth/local_auth/local_auth.dart create mode 100644 lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart create mode 100644 lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart create mode 100644 lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart create mode 100644 lib/features/data_domain/auth/network_auth/data/data.dart rename lib/features/data_domain/auth/{data/network_auth => network_auth/data}/data_source/data_source.dart (100%) rename lib/features/data_domain/auth/{data/network_auth => network_auth/data}/data_source/network_auth_data_source.dart (81%) rename lib/features/data_domain/auth/{data/network_auth => network_auth/data}/models/auth_response.dart (100%) rename lib/features/data_domain/auth/{data/network_auth => network_auth/data}/models/models.dart (100%) rename lib/features/data_domain/auth/{data/network_auth => network_auth/data}/repository/network_auth_repository_impl.dart (60%) rename lib/features/data_domain/auth/{data/network_auth => network_auth/data}/repository/repository.dart (100%) create mode 100644 lib/features/data_domain/auth/network_auth/domain/domain.dart create mode 100644 lib/features/data_domain/auth/network_auth/domain/repository/network_auth_repository.dart rename lib/features/data_domain/auth/{domain/network_auth => network_auth/domain}/repository/repository.dart (100%) create mode 100644 lib/features/data_domain/auth/network_auth/network_auth.dart rename lib/features/data_domain/auth/{domain => }/service/service.dart (100%) create mode 100644 lib/features/data_domain/auth/service/service/auth_service.dart rename lib/features/data_domain/auth/{domain => }/service/service/auth_service_impl.dart (72%) rename lib/features/data_domain/auth/{domain => }/service/service/service.dart (100%) create mode 100644 lib/features/data_domain/auth/service/use_cases/authorize_user.dart rename lib/features/data_domain/auth/{domain => }/service/use_cases/use_cases.dart (100%) rename lib/features/data_domain/auth/{domain => }/shared/client_credentials.dart (100%) rename lib/features/data_domain/auth/{domain => }/shared/full_credentials.dart (69%) rename lib/features/data_domain/auth/{domain => }/shared/shared.dart (100%) rename lib/features/data_domain/auth/{domain => }/shared/user_credentials.dart (100%) diff --git a/lib/core/util/converters/converter_with_parameter.dart b/lib/core/util/converters/converter_with_parameter.dart deleted file mode 100644 index 066aa55..0000000 --- a/lib/core/util/converters/converter_with_parameter.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:spotify_downloader/core/util/converters/base_value_converter.dart/base_value_converter.dart'; - -abstract class ConverterWithParameter extends BaseValueConverter { - -} \ No newline at end of file diff --git a/lib/core/util/converters/result_converters/result_value_converter.dart b/lib/core/util/converters/result_converters/result_value_converter.dart deleted file mode 100644 index a76f01b..0000000 --- a/lib/core/util/converters/result_converters/result_value_converter.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'package:spotify_downloader/core/util/converters/base_value_converter.dart/base_value_converter.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -abstract class ResultValueConverter - implements BaseValueConverter, T2, Result, T1> {} diff --git a/lib/core/util/converters/simple_converters/async_value_converter.dart b/lib/core/util/converters/simple_converters/async_value_converter.dart deleted file mode 100644 index 5087f5d..0000000 --- a/lib/core/util/converters/simple_converters/async_value_converter.dart +++ /dev/null @@ -1,3 +0,0 @@ -import 'package:spotify_downloader/core/util/converters/base_value_converter.dart/base_value_converter.dart'; - -abstract class AsyncValueConverter implements BaseValueConverter, T2, Future, T1> {} diff --git a/lib/core/util/converters/simple_converters/value_converter.dart b/lib/core/util/converters/simple_converters/value_converter.dart deleted file mode 100644 index 04b1d48..0000000 --- a/lib/core/util/converters/simple_converters/value_converter.dart +++ /dev/null @@ -1,3 +0,0 @@ -import 'package:spotify_downloader/core/util/converters/base_value_converter.dart/base_value_converter.dart'; - -abstract class ValueConverter implements BaseValueConverter { } \ No newline at end of file diff --git a/lib/core/utils/cancellation_token/cancellation_token.dart b/lib/core/utils/cancellation_token/cancellation_token.dart new file mode 100644 index 0000000..0c3729f --- /dev/null +++ b/lib/core/utils/cancellation_token/cancellation_token.dart @@ -0,0 +1,2 @@ +export 'cancellation_token_class.dart'; +export 'cancellation_token_source.dart'; diff --git a/lib/core/util/cancellation_token/cancellation_token.dart b/lib/core/utils/cancellation_token/cancellation_token_class.dart similarity index 75% rename from lib/core/util/cancellation_token/cancellation_token.dart rename to lib/core/utils/cancellation_token/cancellation_token_class.dart index 3c4a8f0..3cc3790 100644 --- a/lib/core/util/cancellation_token/cancellation_token.dart +++ b/lib/core/utils/cancellation_token/cancellation_token_class.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token_source.dart'; +import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_source.dart'; class CancellationToken { CancellationToken({required this.source}); diff --git a/lib/core/util/cancellation_token/cancellation_token_source.dart b/lib/core/utils/cancellation_token/cancellation_token_source.dart similarity index 69% rename from lib/core/util/cancellation_token/cancellation_token_source.dart rename to lib/core/utils/cancellation_token/cancellation_token_source.dart index d7a6353..7f59e34 100644 --- a/lib/core/util/cancellation_token/cancellation_token_source.dart +++ b/lib/core/utils/cancellation_token/cancellation_token_source.dart @@ -1,4 +1,4 @@ -import 'cancellation_token.dart'; +import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_class.dart'; class CancellationTokenSource { bool _isCancelled = false; diff --git a/lib/core/utils/converters/abstract/abstract.dart b/lib/core/utils/converters/abstract/abstract.dart new file mode 100644 index 0000000..083c5a9 --- /dev/null +++ b/lib/core/utils/converters/abstract/abstract.dart @@ -0,0 +1 @@ +export 'converter_with_parameter.dart'; diff --git a/lib/core/util/converters/abstract/converter_with_parameter.dart b/lib/core/utils/converters/abstract/converter_with_parameter.dart similarity index 50% rename from lib/core/util/converters/abstract/converter_with_parameter.dart rename to lib/core/utils/converters/abstract/converter_with_parameter.dart index 066aa55..a48772e 100644 --- a/lib/core/util/converters/abstract/converter_with_parameter.dart +++ b/lib/core/utils/converters/abstract/converter_with_parameter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/base_value_converter.dart/base_value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/base_value_converter.dart/base_value_converter.dart'; abstract class ConverterWithParameter extends BaseValueConverter { diff --git a/lib/core/util/converters/base_value_converter.dart/base_value_converter.dart b/lib/core/utils/converters/base_value_converter.dart/base_value_converter.dart similarity index 100% rename from lib/core/util/converters/base_value_converter.dart/base_value_converter.dart rename to lib/core/utils/converters/base_value_converter.dart/base_value_converter.dart diff --git a/lib/core/utils/converters/base_value_converter.dart/base_value_converter.dart.dart b/lib/core/utils/converters/base_value_converter.dart/base_value_converter.dart.dart new file mode 100644 index 0000000..42769a9 --- /dev/null +++ b/lib/core/utils/converters/base_value_converter.dart/base_value_converter.dart.dart @@ -0,0 +1 @@ +export 'base_value_converter.dart'; diff --git a/lib/core/utils/converters/converters.dart b/lib/core/utils/converters/converters.dart new file mode 100644 index 0000000..8cc452d --- /dev/null +++ b/lib/core/utils/converters/converters.dart @@ -0,0 +1,4 @@ +export 'abstract/abstract.dart'; +export 'base_value_converter.dart/base_value_converter.dart.dart'; +export 'result_converters/result_converters.dart'; +export 'simple_converters/simple_converters.dart'; diff --git a/lib/core/utils/converters/result_converters/result_converters.dart b/lib/core/utils/converters/result_converters/result_converters.dart new file mode 100644 index 0000000..682dcd6 --- /dev/null +++ b/lib/core/utils/converters/result_converters/result_converters.dart @@ -0,0 +1 @@ +export 'result_value_converter.dart'; diff --git a/lib/core/utils/converters/result_converters/result_value_converter.dart b/lib/core/utils/converters/result_converters/result_value_converter.dart new file mode 100644 index 0000000..2d2ae78 --- /dev/null +++ b/lib/core/utils/converters/result_converters/result_value_converter.dart @@ -0,0 +1,6 @@ +import 'package:spotify_downloader/core/utils/converters/base_value_converter.dart/base_value_converter.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; + +abstract class ResultValueConverter + implements BaseValueConverter, T2, Result, T1> {} diff --git a/lib/core/utils/converters/simple_converters/async_value_converter.dart b/lib/core/utils/converters/simple_converters/async_value_converter.dart new file mode 100644 index 0000000..5d2d609 --- /dev/null +++ b/lib/core/utils/converters/simple_converters/async_value_converter.dart @@ -0,0 +1,3 @@ +import 'package:spotify_downloader/core/utils/converters/base_value_converter.dart/base_value_converter.dart'; + +abstract class AsyncValueConverter implements BaseValueConverter, T2, Future, T1> {} diff --git a/lib/core/utils/converters/simple_converters/simple_converters.dart b/lib/core/utils/converters/simple_converters/simple_converters.dart new file mode 100644 index 0000000..2933ec3 --- /dev/null +++ b/lib/core/utils/converters/simple_converters/simple_converters.dart @@ -0,0 +1,2 @@ +export 'async_value_converter.dart'; +export 'value_converter.dart'; diff --git a/lib/core/utils/converters/simple_converters/value_converter.dart b/lib/core/utils/converters/simple_converters/value_converter.dart new file mode 100644 index 0000000..ad8935a --- /dev/null +++ b/lib/core/utils/converters/simple_converters/value_converter.dart @@ -0,0 +1,3 @@ +import 'package:spotify_downloader/core/utils/converters/base_value_converter.dart/base_value_converter.dart'; + +abstract class ValueConverter implements BaseValueConverter { } \ No newline at end of file diff --git a/lib/core/util/failures/failures.dart b/lib/core/utils/failures/custom_failures.dart similarity index 92% rename from lib/core/util/failures/failures.dart rename to lib/core/utils/failures/custom_failures.dart index 4cfac49..44491a6 100644 --- a/lib/core/util/failures/failures.dart +++ b/lib/core/utils/failures/custom_failures.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; final class NotFoundFailure extends Failure { const NotFoundFailure({super.message = 'not found failure'}); diff --git a/lib/core/util/failures/failure.dart b/lib/core/utils/failures/failure.dart similarity index 100% rename from lib/core/util/failures/failure.dart rename to lib/core/utils/failures/failure.dart diff --git a/lib/core/utils/failures/failures.dart b/lib/core/utils/failures/failures.dart new file mode 100644 index 0000000..62716d4 --- /dev/null +++ b/lib/core/utils/failures/failures.dart @@ -0,0 +1,2 @@ +export 'custom_failures.dart'; +export 'failure.dart'; diff --git a/lib/core/util/isolate_pool/cancellable_compute.dart b/lib/core/utils/isolate_pool/cancellable_compute.dart similarity index 100% rename from lib/core/util/isolate_pool/cancellable_compute.dart rename to lib/core/utils/isolate_pool/cancellable_compute.dart diff --git a/lib/core/util/isolate_pool/cancellable_stream.dart b/lib/core/utils/isolate_pool/cancellable_stream.dart similarity index 100% rename from lib/core/util/isolate_pool/cancellable_stream.dart rename to lib/core/utils/isolate_pool/cancellable_stream.dart diff --git a/lib/core/utils/isolate_pool/isolate_pool.dart b/lib/core/utils/isolate_pool/isolate_pool.dart new file mode 100644 index 0000000..c7cbdc0 --- /dev/null +++ b/lib/core/utils/isolate_pool/isolate_pool.dart @@ -0,0 +1,4 @@ +export 'cancellable_compute.dart'; +export 'cancellable_stream.dart'; +export 'isolate_pool_class.dart'; +export 'isolate_pool_was_closed_exception.dart'; diff --git a/lib/core/util/isolate_pool/isolate_pool.dart b/lib/core/utils/isolate_pool/isolate_pool_class.dart similarity index 88% rename from lib/core/util/isolate_pool/isolate_pool.dart rename to lib/core/utils/isolate_pool/isolate_pool_class.dart index e13ba3c..9f5f82c 100644 --- a/lib/core/util/isolate_pool/isolate_pool.dart +++ b/lib/core/utils/isolate_pool/isolate_pool_class.dart @@ -1,11 +1,5 @@ import 'dart:isolate'; - -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token.dart'; -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token_source.dart'; -import 'package:spotify_downloader/core/util/isolate_pool/cancellable_compute.dart'; -import 'package:spotify_downloader/core/util/isolate_pool/isolate_pool_was_closed_exception.dart'; - -import 'cancellable_stream.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; class IsolatePool { IsolatePool._(Isolate mainIsolate, SendPort addSendPort) diff --git a/lib/core/util/isolate_pool/isolate_pool_was_closed_exception.dart b/lib/core/utils/isolate_pool/isolate_pool_was_closed_exception.dart similarity index 100% rename from lib/core/util/isolate_pool/isolate_pool_was_closed_exception.dart rename to lib/core/utils/isolate_pool/isolate_pool_was_closed_exception.dart diff --git a/lib/core/util/result/cancellable_result.dart b/lib/core/utils/result/cancellable_result.dart similarity index 100% rename from lib/core/util/result/cancellable_result.dart rename to lib/core/utils/result/cancellable_result.dart diff --git a/lib/core/utils/result/result.dart b/lib/core/utils/result/result.dart new file mode 100644 index 0000000..6076b20 --- /dev/null +++ b/lib/core/utils/result/result.dart @@ -0,0 +1,2 @@ +export 'cancellable_result.dart'; +export 'result_class.dart'; diff --git a/lib/core/util/result/result.dart b/lib/core/utils/result/result_class.dart similarity index 99% rename from lib/core/util/result/result.dart rename to lib/core/utils/result/result_class.dart index a11b945..6212f66 100644 --- a/lib/core/util/result/result.dart +++ b/lib/core/utils/result/result_class.dart @@ -6,4 +6,4 @@ class Result { final bool isSuccessful; final Type? result; final Failure? failure; -} +} \ No newline at end of file diff --git a/lib/core/util/use_case/use_case.dart b/lib/core/utils/use_case/use_case.dart similarity index 60% rename from lib/core/util/use_case/use_case.dart rename to lib/core/utils/use_case/use_case.dart index 2c38d1f..6960b01 100644 --- a/lib/core/util/use_case/use_case.dart +++ b/lib/core/utils/use_case/use_case.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; abstract class UseCase { Future> call(Params params); diff --git a/lib/core/util/util_methods.dart b/lib/core/utils/util_methods.dart similarity index 89% rename from lib/core/util/util_methods.dart rename to lib/core/utils/util_methods.dart index 0ff0b6b..2184de8 100644 --- a/lib/core/util/util_methods.dart +++ b/lib/core/utils/util_methods.dart @@ -4,9 +4,7 @@ import 'dart:ui'; import 'package:http/http.dart'; import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; Color getIntermediateColor(Color color1, Color color2, double ratio) { return Color.fromARGB( diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart new file mode 100644 index 0000000..a90e369 --- /dev/null +++ b/lib/core/utils/utils.dart @@ -0,0 +1,7 @@ +export 'cancellation_token/cancellation_token.dart'; +export 'converters/converters.dart'; +export 'failures/failures.dart'; +export 'isolate_pool/isolate_pool.dart'; +export 'result/result.dart'; +export 'util_methods.dart'; +export 'use_case/use_case.dart'; diff --git a/lib/features/data_domain/auth/auth.dart b/lib/features/data_domain/auth/auth.dart index c2ecb87..46545f7 100644 --- a/lib/features/data_domain/auth/auth.dart +++ b/lib/features/data_domain/auth/auth.dart @@ -1,2 +1,4 @@ -export 'data/data.dart'; -export 'domain/domain.dart'; +export 'local_auth/local_auth.dart'; +export 'network_auth/network_auth.dart'; +export 'service/service.dart'; +export 'shared/shared.dart'; diff --git a/lib/features/data_domain/auth/data/data.dart b/lib/features/data_domain/auth/data/data.dart deleted file mode 100644 index a8ee62a..0000000 --- a/lib/features/data_domain/auth/data/data.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'local_auth/local_auth.dart'; -export 'network_auth/network_auth.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/auth/data/local_auth/local_auth.dart b/lib/features/data_domain/auth/data/local_auth/local_auth.dart deleted file mode 100644 index 5f0c6e9..0000000 --- a/lib/features/data_domain/auth/data/local_auth/local_auth.dart +++ /dev/null @@ -1,3 +0,0 @@ -export 'data_source/local_auth_data_source.dart'; -export 'models/local_auth_credentials.dart'; -export 'repository/local_auth_repository_impl.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/auth/data/network_auth/network_auth.dart b/lib/features/data_domain/auth/data/network_auth/network_auth.dart deleted file mode 100644 index fd42397..0000000 --- a/lib/features/data_domain/auth/data/network_auth/network_auth.dart +++ /dev/null @@ -1,3 +0,0 @@ -export 'data_source/network_auth_data_source.dart'; -export 'models/auth_response.dart'; -export 'repository/network_auth_repository_impl.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/auth/domain/domain.dart b/lib/features/data_domain/auth/domain/domain.dart deleted file mode 100644 index 46545f7..0000000 --- a/lib/features/data_domain/auth/domain/domain.dart +++ /dev/null @@ -1,4 +0,0 @@ -export 'local_auth/local_auth.dart'; -export 'network_auth/network_auth.dart'; -export 'service/service.dart'; -export 'shared/shared.dart'; diff --git a/lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart deleted file mode 100644 index b631825..0000000 --- a/lib/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; - -abstract class LocalClientAuthRepository { - Future> getClientCredentials(); - Future> saveClientCredentials(ClientCredentials clientCredentials); -} diff --git a/lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart deleted file mode 100644 index 82c796a..0000000 --- a/lib/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/full_credentials.dart'; - - -abstract class LocalFullAuthRepository { - Future> getFullCredentials(); - - Future> saveFullCredentials(FullCredentials fullCredentials); -} diff --git a/lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart b/lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart deleted file mode 100644 index 61e77f6..0000000 --- a/lib/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/user_credentials.dart'; - -abstract class LocalUserAuthRepository { - Future> clearUserCredentials(); - - Future> saveUserCredentials(UserCredentials userCredentials); -} diff --git a/lib/features/data_domain/auth/domain/network_auth/network_auth.dart b/lib/features/data_domain/auth/domain/network_auth/network_auth.dart deleted file mode 100644 index d64fe2b..0000000 --- a/lib/features/data_domain/auth/domain/network_auth/network_auth.dart +++ /dev/null @@ -1 +0,0 @@ -export 'repository/network_auth_repository.dart'; diff --git a/lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart b/lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart deleted file mode 100644 index ace8a8f..0000000 --- a/lib/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; - -abstract class NetworkAuthRepository { - Future> authorizeUser(ClientCredentials clientCredentials); -} \ No newline at end of file diff --git a/lib/features/data_domain/auth/domain/service/service/auth_service.dart b/lib/features/data_domain/auth/domain/service/service/auth_service.dart deleted file mode 100644 index 3906bf2..0000000 --- a/lib/features/data_domain/auth/domain/service/service/auth_service.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -abstract class AuthService { - Future> authorizeUser(); -} \ No newline at end of file diff --git a/lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart b/lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart deleted file mode 100644 index 5e0a8a0..0000000 --- a/lib/features/data_domain/auth/domain/service/use_cases/authorize_user.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/service/service/auth_service.dart'; - -class AuthorizeUser implements UseCase { - AuthorizeUser({required AuthService authService}) : _authService = authService; - - final AuthService _authService; - - @override - Future> call(void params) { - return _authService.authorizeUser(); - } -} \ No newline at end of file diff --git a/lib/features/data_domain/auth/local_auth/data/data.dart b/lib/features/data_domain/auth/local_auth/data/data.dart new file mode 100644 index 0000000..458d27b --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/data/data.dart @@ -0,0 +1,3 @@ +export 'data_source/data_source.dart'; +export 'models/models.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/data_domain/auth/data/local_auth/data_source/data_source.dart b/lib/features/data_domain/auth/local_auth/data/data_source/data_source.dart similarity index 100% rename from lib/features/data_domain/auth/data/local_auth/data_source/data_source.dart rename to lib/features/data_domain/auth/local_auth/data/data_source/data_source.dart diff --git a/lib/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart b/lib/features/data_domain/auth/local_auth/data/data_source/local_auth_data_source.dart similarity index 94% rename from lib/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart rename to lib/features/data_domain/auth/local_auth/data/data_source/local_auth_data_source.dart index 5fb7b08..f4c51a0 100644 --- a/lib/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart +++ b/lib/features/data_domain/auth/local_auth/data/data_source/local_auth_data_source.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:path_provider/path_provider.dart'; import 'package:spotify_downloader/core/consts/local_paths.dart'; -import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/data/data.dart'; class LocalAuthDataSource { Future getLocalAuthCredentials() async { diff --git a/lib/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart b/lib/features/data_domain/auth/local_auth/data/models/local_auth_credentials.dart similarity index 100% rename from lib/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart rename to lib/features/data_domain/auth/local_auth/data/models/local_auth_credentials.dart diff --git a/lib/features/data_domain/auth/data/local_auth/models/models.dart b/lib/features/data_domain/auth/local_auth/data/models/models.dart similarity index 100% rename from lib/features/data_domain/auth/data/local_auth/models/models.dart rename to lib/features/data_domain/auth/local_auth/data/models/models.dart diff --git a/lib/features/data_domain/auth/data/local_auth/repository/converter/converter.dart b/lib/features/data_domain/auth/local_auth/data/repository/converter/converter.dart similarity index 100% rename from lib/features/data_domain/auth/data/local_auth/repository/converter/converter.dart rename to lib/features/data_domain/auth/local_auth/data/repository/converter/converter.dart diff --git a/lib/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart b/lib/features/data_domain/auth/local_auth/data/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart similarity index 74% rename from lib/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart rename to lib/features/data_domain/auth/local_auth/data/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart index c9ce9bc..f207420 100644 --- a/lib/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart +++ b/lib/features/data_domain/auth/local_auth/data/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart @@ -1,10 +1,9 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/models/local_auth_credentials.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/data/data.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/shared.dart'; -class LocalAuthCredentialsToAuthCredentialsConverter - implements ValueConverter { +class LocalAuthCredentialsToAuthCredentialsConverter implements ValueConverter { static const String _notSpecified = 'not specified'; @override diff --git a/lib/features/data_domain/auth/data/local_auth/repository/local_auth_repository_impl.dart b/lib/features/data_domain/auth/local_auth/data/repository/local_auth_repository_impl.dart similarity index 84% rename from lib/features/data_domain/auth/data/local_auth/repository/local_auth_repository_impl.dart rename to lib/features/data_domain/auth/local_auth/data/repository/local_auth_repository_impl.dart index 279672d..64899c2 100644 --- a/lib/features/data_domain/auth/data/local_auth/repository/local_auth_repository_impl.dart +++ b/lib/features/data_domain/auth/local_auth/data/repository/local_auth_repository_impl.dart @@ -1,11 +1,6 @@ import 'package:spotify_downloader/core/consts/spotify_client.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/data_source/local_auth_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/auth/data/local_auth/repository/converter/local_auth_credentials_to_auth_credentials_converter.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/repositories.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/auth.dart'; class LocalAuthRepositoryImpl implements LocalFullAuthRepository, LocalClientAuthRepository, LocalUserAuthRepository { LocalAuthRepositoryImpl({required LocalAuthDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/auth/data/local_auth/repository/repository.dart b/lib/features/data_domain/auth/local_auth/data/repository/repository.dart similarity index 100% rename from lib/features/data_domain/auth/data/local_auth/repository/repository.dart rename to lib/features/data_domain/auth/local_auth/data/repository/repository.dart diff --git a/lib/features/data_domain/auth/domain/local_auth/local_auth.dart b/lib/features/data_domain/auth/local_auth/domain/domain.dart similarity index 100% rename from lib/features/data_domain/auth/domain/local_auth/local_auth.dart rename to lib/features/data_domain/auth/local_auth/domain/domain.dart diff --git a/lib/features/data_domain/auth/local_auth/domain/local_auth.dart b/lib/features/data_domain/auth/local_auth/domain/local_auth.dart new file mode 100644 index 0000000..3d91876 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/domain/local_auth.dart @@ -0,0 +1,2 @@ +export 'repositories/repositories.dart'; +export 'use_cases/use_cases.dart'; diff --git a/lib/features/data_domain/auth/local_auth/domain/repositories/local_client_auth_repository.dart b/lib/features/data_domain/auth/local_auth/domain/repositories/local_client_auth_repository.dart new file mode 100644 index 0000000..e5bc725 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/domain/repositories/local_client_auth_repository.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/client_credentials.dart'; + +abstract class LocalClientAuthRepository { + Future> getClientCredentials(); + Future> saveClientCredentials(ClientCredentials clientCredentials); +} diff --git a/lib/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart b/lib/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart new file mode 100644 index 0000000..d789b65 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart @@ -0,0 +1,10 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/full_credentials.dart'; + + +abstract class LocalFullAuthRepository { + Future> getFullCredentials(); + + Future> saveFullCredentials(FullCredentials fullCredentials); +} diff --git a/lib/features/data_domain/auth/local_auth/domain/repositories/local_user_auth_repository.dart b/lib/features/data_domain/auth/local_auth/domain/repositories/local_user_auth_repository.dart new file mode 100644 index 0000000..6a95059 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/domain/repositories/local_user_auth_repository.dart @@ -0,0 +1,9 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/user_credentials.dart'; + +abstract class LocalUserAuthRepository { + Future> clearUserCredentials(); + + Future> saveUserCredentials(UserCredentials userCredentials); +} diff --git a/lib/features/data_domain/auth/domain/local_auth/repositories/repositories.dart b/lib/features/data_domain/auth/local_auth/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/auth/domain/local_auth/repositories/repositories.dart rename to lib/features/data_domain/auth/local_auth/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart b/lib/features/data_domain/auth/local_auth/domain/use_cases/clear_user_credentials.dart similarity index 54% rename from lib/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart rename to lib/features/data_domain/auth/local_auth/domain/use_cases/clear_user_credentials.dart index 301da60..70324fd 100644 --- a/lib/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart +++ b/lib/features/data_domain/auth/local_auth/domain/use_cases/clear_user_credentials.dart @@ -1,9 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_user_auth_repository.dart'; - +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/local_auth.dart'; class ClearUserCredentials implements UseCase { ClearUserCredentials({required LocalUserAuthRepository localUserAuthRepository}) diff --git a/lib/features/data_domain/auth/domain/local_auth/use_cases/get_client_credentials.dart b/lib/features/data_domain/auth/local_auth/domain/use_cases/get_client_credentials.dart similarity index 50% rename from lib/features/data_domain/auth/domain/local_auth/use_cases/get_client_credentials.dart rename to lib/features/data_domain/auth/local_auth/domain/use_cases/get_client_credentials.dart index 1494c02..d71eed5 100644 --- a/lib/features/data_domain/auth/domain/local_auth/use_cases/get_client_credentials.dart +++ b/lib/features/data_domain/auth/local_auth/domain/use_cases/get_client_credentials.dart @@ -1,10 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; - +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/local_auth.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/shared.dart'; class GetClientCredentials implements UseCase { GetClientCredentials({required LocalClientAuthRepository localClientAuthRepository}) diff --git a/lib/features/data_domain/auth/domain/local_auth/use_cases/save_client_credentials.dart b/lib/features/data_domain/auth/local_auth/domain/use_cases/save_client_credentials.dart similarity index 52% rename from lib/features/data_domain/auth/domain/local_auth/use_cases/save_client_credentials.dart rename to lib/features/data_domain/auth/local_auth/domain/use_cases/save_client_credentials.dart index e1fca7b..feead3b 100644 --- a/lib/features/data_domain/auth/domain/local_auth/use_cases/save_client_credentials.dart +++ b/lib/features/data_domain/auth/local_auth/domain/use_cases/save_client_credentials.dart @@ -1,10 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_client_auth_repository.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; - +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/local_auth.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/shared.dart'; class SaveClientCredentials implements UseCase { SaveClientCredentials({required LocalClientAuthRepository localClientAuthRepository}) diff --git a/lib/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart b/lib/features/data_domain/auth/local_auth/domain/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart rename to lib/features/data_domain/auth/local_auth/domain/use_cases/use_cases.dart diff --git a/lib/features/data_domain/auth/local_auth/local_auth.dart b/lib/features/data_domain/auth/local_auth/local_auth.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/local_auth.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart new file mode 100644 index 0000000..e5bc725 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/client_credentials.dart'; + +abstract class LocalClientAuthRepository { + Future> getClientCredentials(); + Future> saveClientCredentials(ClientCredentials clientCredentials); +} diff --git a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart new file mode 100644 index 0000000..b2ea5b3 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart @@ -0,0 +1,11 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/shared/full_credentials.dart'; + + +abstract class LocalFullAuthRepository { + Future> getFullCredentials(); + + Future> saveFullCredentials(FullCredentials fullCredentials); +} diff --git a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart new file mode 100644 index 0000000..caf4046 --- /dev/null +++ b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart @@ -0,0 +1,10 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/shared/user_credentials.dart'; + +abstract class LocalUserAuthRepository { + Future> clearUserCredentials(); + + Future> saveUserCredentials(UserCredentials userCredentials); +} diff --git a/lib/features/data_domain/auth/network_auth/data/data.dart b/lib/features/data_domain/auth/network_auth/data/data.dart new file mode 100644 index 0000000..458d27b --- /dev/null +++ b/lib/features/data_domain/auth/network_auth/data/data.dart @@ -0,0 +1,3 @@ +export 'data_source/data_source.dart'; +export 'models/models.dart'; +export 'repository/repository.dart'; diff --git a/lib/features/data_domain/auth/data/network_auth/data_source/data_source.dart b/lib/features/data_domain/auth/network_auth/data/data_source/data_source.dart similarity index 100% rename from lib/features/data_domain/auth/data/network_auth/data_source/data_source.dart rename to lib/features/data_domain/auth/network_auth/data/data_source/data_source.dart diff --git a/lib/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart b/lib/features/data_domain/auth/network_auth/data/data_source/network_auth_data_source.dart similarity index 81% rename from lib/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart rename to lib/features/data_domain/auth/network_auth/data/data_source/network_auth_data_source.dart index ba0c137..c2afab8 100644 --- a/lib/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart +++ b/lib/features/data_domain/auth/network_auth/data/data_source/network_auth_data_source.dart @@ -2,12 +2,8 @@ import 'dart:io'; import 'package:oauth2_client/spotify_oauth2_client.dart'; import 'package:spotify_downloader/core/consts/spotify_client.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/data/network_auth/models/auth_response.dart'; - +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/network_auth/data/data.dart'; class NetworkAuthDataSource { Future> authorizeUser(String clientId) async { diff --git a/lib/features/data_domain/auth/data/network_auth/models/auth_response.dart b/lib/features/data_domain/auth/network_auth/data/models/auth_response.dart similarity index 100% rename from lib/features/data_domain/auth/data/network_auth/models/auth_response.dart rename to lib/features/data_domain/auth/network_auth/data/models/auth_response.dart diff --git a/lib/features/data_domain/auth/data/network_auth/models/models.dart b/lib/features/data_domain/auth/network_auth/data/models/models.dart similarity index 100% rename from lib/features/data_domain/auth/data/network_auth/models/models.dart rename to lib/features/data_domain/auth/network_auth/data/models/models.dart diff --git a/lib/features/data_domain/auth/data/network_auth/repository/network_auth_repository_impl.dart b/lib/features/data_domain/auth/network_auth/data/repository/network_auth_repository_impl.dart similarity index 60% rename from lib/features/data_domain/auth/data/network_auth/repository/network_auth_repository_impl.dart rename to lib/features/data_domain/auth/network_auth/data/repository/network_auth_repository_impl.dart index 2542791..9eb44b8 100644 --- a/lib/features/data_domain/auth/data/network_auth/repository/network_auth_repository_impl.dart +++ b/lib/features/data_domain/auth/network_auth/data/repository/network_auth_repository_impl.dart @@ -1,9 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/data/network_auth/data_source/network_auth_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/shared.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/network_auth/network_auth.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/shared.dart'; class NetworkAuthRepositoryImpl implements NetworkAuthRepository { NetworkAuthRepositoryImpl({required NetworkAuthDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/auth/data/network_auth/repository/repository.dart b/lib/features/data_domain/auth/network_auth/data/repository/repository.dart similarity index 100% rename from lib/features/data_domain/auth/data/network_auth/repository/repository.dart rename to lib/features/data_domain/auth/network_auth/data/repository/repository.dart diff --git a/lib/features/data_domain/auth/network_auth/domain/domain.dart b/lib/features/data_domain/auth/network_auth/domain/domain.dart new file mode 100644 index 0000000..0901fc3 --- /dev/null +++ b/lib/features/data_domain/auth/network_auth/domain/domain.dart @@ -0,0 +1 @@ +export 'repository/repository.dart'; diff --git a/lib/features/data_domain/auth/network_auth/domain/repository/network_auth_repository.dart b/lib/features/data_domain/auth/network_auth/domain/repository/network_auth_repository.dart new file mode 100644 index 0000000..89868a7 --- /dev/null +++ b/lib/features/data_domain/auth/network_auth/domain/repository/network_auth_repository.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; + +import 'package:spotify_downloader/features/data_domain/auth/shared/shared.dart'; + +abstract class NetworkAuthRepository { + Future> authorizeUser(ClientCredentials clientCredentials); +} \ No newline at end of file diff --git a/lib/features/data_domain/auth/domain/network_auth/repository/repository.dart b/lib/features/data_domain/auth/network_auth/domain/repository/repository.dart similarity index 100% rename from lib/features/data_domain/auth/domain/network_auth/repository/repository.dart rename to lib/features/data_domain/auth/network_auth/domain/repository/repository.dart diff --git a/lib/features/data_domain/auth/network_auth/network_auth.dart b/lib/features/data_domain/auth/network_auth/network_auth.dart new file mode 100644 index 0000000..c2ecb87 --- /dev/null +++ b/lib/features/data_domain/auth/network_auth/network_auth.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; diff --git a/lib/features/data_domain/auth/domain/service/service.dart b/lib/features/data_domain/auth/service/service.dart similarity index 100% rename from lib/features/data_domain/auth/domain/service/service.dart rename to lib/features/data_domain/auth/service/service.dart diff --git a/lib/features/data_domain/auth/service/service/auth_service.dart b/lib/features/data_domain/auth/service/service/auth_service.dart new file mode 100644 index 0000000..53c3660 --- /dev/null +++ b/lib/features/data_domain/auth/service/service/auth_service.dart @@ -0,0 +1,6 @@ +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; + +abstract class AuthService { + Future> authorizeUser(); +} \ No newline at end of file diff --git a/lib/features/data_domain/auth/domain/service/service/auth_service_impl.dart b/lib/features/data_domain/auth/service/service/auth_service_impl.dart similarity index 72% rename from lib/features/data_domain/auth/domain/service/service/auth_service_impl.dart rename to lib/features/data_domain/auth/service/service/auth_service_impl.dart index 9521ca1..b594b72 100644 --- a/lib/features/data_domain/auth/domain/service/service/auth_service_impl.dart +++ b/lib/features/data_domain/auth/service/service/auth_service_impl.dart @@ -1,10 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/repositories.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/network_auth/repository/network_auth_repository.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/service/service/auth_service.dart'; - +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/auth.dart'; class AuthServiceImpl implements AuthService { AuthServiceImpl( diff --git a/lib/features/data_domain/auth/domain/service/service/service.dart b/lib/features/data_domain/auth/service/service/service.dart similarity index 100% rename from lib/features/data_domain/auth/domain/service/service/service.dart rename to lib/features/data_domain/auth/service/service/service.dart diff --git a/lib/features/data_domain/auth/service/use_cases/authorize_user.dart b/lib/features/data_domain/auth/service/use_cases/authorize_user.dart new file mode 100644 index 0000000..df74047 --- /dev/null +++ b/lib/features/data_domain/auth/service/use_cases/authorize_user.dart @@ -0,0 +1,13 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/service/service/auth_service.dart'; + +class AuthorizeUser implements UseCase { + AuthorizeUser({required AuthService authService}) : _authService = authService; + + final AuthService _authService; + + @override + Future> call(void params) { + return _authService.authorizeUser(); + } +} \ No newline at end of file diff --git a/lib/features/data_domain/auth/domain/service/use_cases/use_cases.dart b/lib/features/data_domain/auth/service/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/auth/domain/service/use_cases/use_cases.dart rename to lib/features/data_domain/auth/service/use_cases/use_cases.dart diff --git a/lib/features/data_domain/auth/domain/shared/client_credentials.dart b/lib/features/data_domain/auth/shared/client_credentials.dart similarity index 100% rename from lib/features/data_domain/auth/domain/shared/client_credentials.dart rename to lib/features/data_domain/auth/shared/client_credentials.dart diff --git a/lib/features/data_domain/auth/domain/shared/full_credentials.dart b/lib/features/data_domain/auth/shared/full_credentials.dart similarity index 69% rename from lib/features/data_domain/auth/domain/shared/full_credentials.dart rename to lib/features/data_domain/auth/shared/full_credentials.dart index e0c8488..c707ddf 100644 --- a/lib/features/data_domain/auth/domain/shared/full_credentials.dart +++ b/lib/features/data_domain/auth/shared/full_credentials.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/user_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/client_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/user_credentials.dart'; class FullCredentials implements UserCredentials, ClientCredentials { FullCredentials( diff --git a/lib/features/data_domain/auth/domain/shared/shared.dart b/lib/features/data_domain/auth/shared/shared.dart similarity index 100% rename from lib/features/data_domain/auth/domain/shared/shared.dart rename to lib/features/data_domain/auth/shared/shared.dart diff --git a/lib/features/data_domain/auth/domain/shared/user_credentials.dart b/lib/features/data_domain/auth/shared/user_credentials.dart similarity index 100% rename from lib/features/data_domain/auth/domain/shared/user_credentials.dart rename to lib/features/data_domain/auth/shared/user_credentials.dart diff --git a/lib/features/data_domain/settings/data/data_source/settings_data_source.dart b/lib/features/data_domain/settings/data/data_source/settings_data_source.dart index 8b8223a..89399ab 100644 --- a/lib/features/data_domain/settings/data/data_source/settings_data_source.dart +++ b/lib/features/data_domain/settings/data/data_source/settings_data_source.dart @@ -3,8 +3,8 @@ import 'dart:io'; import 'package:path_provider/path_provider.dart'; import 'package:spotify_downloader/core/consts/local_paths.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/settings/data/models/app_settings.dart'; class SettingsDataSource { diff --git a/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart b/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart index af627a4..dafe8a9 100644 --- a/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart +++ b/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/settings/data/data_source/settings_data_source.dart'; import 'package:spotify_downloader/features/data_domain/settings/data/models/app_settings.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; diff --git a/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart b/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart index 0cc1b8c..8ef5542 100644 --- a/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart +++ b/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; abstract class DownloadTracksSettingsRepository { diff --git a/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart b/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart index d14b163..e1b9565 100644 --- a/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart +++ b/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; abstract class LanguageSettingsRepository { Future> getLanguage(); diff --git a/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart b/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart index 3b304ba..5400238 100644 --- a/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; class GetAvailableLanguages implements UseCase, void> { diff --git a/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart b/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart index ac2dc99..fbbdf65 100644 --- a/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; class GetDownloadTracksSettings implements UseCase { diff --git a/lib/features/data_domain/settings/domain/use_cases/get_language.dart b/lib/features/data_domain/settings/domain/use_cases/get_language.dart index 2c942cb..0474754 100644 --- a/lib/features/data_domain/settings/domain/use_cases/get_language.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_language.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; class GetLanguage implements UseCase { diff --git a/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart b/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart index 1bba6cf..12be536 100644 --- a/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart +++ b/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; diff --git a/lib/features/data_domain/settings/domain/use_cases/save_language.dart b/lib/features/data_domain/settings/domain/use_cases/save_language.dart index ddfbec7..e481c16 100644 --- a/lib/features/data_domain/settings/domain/use_cases/save_language.dart +++ b/lib/features/data_domain/settings/domain/use_cases/save_language.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; diff --git a/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart b/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart index 11e451c..e73df32 100644 --- a/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart +++ b/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/consts/spotify_client.dart'; -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/full_credentials.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/full_credentials.dart'; class SpotifyCredentialsConverter implements ValueConverter { diff --git a/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart b/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart index 4215c66..0acbc3c 100644 --- a/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart +++ b/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_credentials_converter.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; diff --git a/lib/features/data_domain/shared/domain/spotify_repository_request.dart b/lib/features/data_domain/shared/domain/spotify_repository_request.dart index 5c216ed..c36806c 100644 --- a/lib/features/data_domain/shared/domain/spotify_repository_request.dart +++ b/lib/features/data_domain/shared/domain/spotify_repository_request.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/full_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/full_credentials.dart'; class SpotifyRepositoryRequest { SpotifyRepositoryRequest({ diff --git a/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart b/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart index 5bd1044..2b8e288 100644 --- a/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart +++ b/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class SpotifyProfileDataSource { diff --git a/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart b/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart index e2ccafe..a162b2b 100644 --- a/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart +++ b/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; diff --git a/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart b/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart index 9c1e9b4..7abd5dd 100644 --- a/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart +++ b/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; diff --git a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart index a49e05d..9dd2da0 100644 --- a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart +++ b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; abstract class SpotifyProfileService { diff --git a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart index cfe04de..7f0beca 100644 --- a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart +++ b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart @@ -1,7 +1,7 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; diff --git a/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart b/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart index 0c6766f..cdf4be3 100644 --- a/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart +++ b/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart index 47c2915..6d4e4cc 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart @@ -5,14 +5,14 @@ import 'dart:io'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:http/http.dart'; import 'package:path/path.dart' as p; -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token.dart'; -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token_source.dart'; -import 'package:spotify_downloader/core/util/isolate_pool/isolate_pool.dart'; -import 'package:spotify_downloader/core/util/result/cancellable_result.dart'; +import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token.dart'; +import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_source.dart'; +import 'package:spotify_downloader/core/utils/isolate_pool/isolate_pool.dart'; +import 'package:spotify_downloader/core/utils/result/cancellable_result.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart index e2ec126..fc5e1e9 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; abstract class AudioMetadataEditor { diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart index 75395b5..cbf2396 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart @@ -2,9 +2,9 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:metadata_god/metadata_god.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; import 'package:http/http.dart' as http; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart b/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart index 85ec37a..11e3b6f 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart @@ -1,6 +1,6 @@ import 'dart:math'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/cancellable_result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/cancellable_result.dart'; class AudioLoadingStream { AudioLoadingStream( diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart index caf0b5c..0e797d4 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart index 2b5d492..aed5acd 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart @@ -1,7 +1,7 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/cancellable_result.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/cancellable_result.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart index fd0254f..2901c5a 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart index 555ac30..6e49a5e 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart index 6718c4a..4a45a39 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart index 6abfb7a..ee36262 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart b/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart index 3cdd1cf..45daedc 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; diff --git a/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart b/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart index e46eabe..9bca82a 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart @@ -1,8 +1,8 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/isolate_pool/isolate_pool.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/isolate_pool/isolate_pool.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart'; diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart b/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart index fda4751..2d767cb 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart @@ -1,5 +1,5 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token.dart'; +import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class GetTracksArgs { diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart b/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart index 934cbf5..34b5f3c 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart @@ -1,6 +1,6 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; class TracksGettingStream { diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart b/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart index 9418394..a364385 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart @@ -1,5 +1,5 @@ import 'package:spotify/spotify.dart' as dto; -import 'package:spotify_downloader/core/util/converters/converter_with_parameter.dart'; +import 'package:spotify_downloader/core/utils/converters/converter_with_parameter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/album.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart' as entity; diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart b/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart index 92af611..52a7591 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/cancellation_token/cancellation_token_source.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_source.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart'; diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart index 66eb76e..eee6944 100644 --- a/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart @@ -2,10 +2,10 @@ import 'dart:io'; import 'dart:math'; import 'package:http/http.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/isolate_pool/isolate_pool.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/isolate_pool/isolate_pool.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; class SearchVideoOnYoutubeDataSource { diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart index 980596e..80ad19c 100644 --- a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart @@ -1,6 +1,6 @@ // ignore_for_file: invalid_use_of_internal_member -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart' as entity; import 'package:youtube_explode_dart/youtube_explode_dart.dart' as model; diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart index c7c490b..cf749e6 100644 --- a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart +++ b/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart index f36d2c6..7c6cba1 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; class LoadingTrackObserver { diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart index 91b10f9..481f249 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart index 6d5d4ab..701b2f8 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; class TrackWithLazyYoutubeUrl { diff --git a/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart b/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart index 0621ddd..0360a13 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart +++ b/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart @@ -1,7 +1,7 @@ // ignore_for_file: void_checks -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart b/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart index 5e8dd19..3e37ad5 100644 --- a/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart +++ b/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart b/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart index a029d3e..60e25b5 100644 --- a/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart +++ b/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart index c9bee3b..83fe410 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart +++ b/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart index e9a2187..78b50eb 100644 --- a/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart index fe439bf..8c41a7f 100644 --- a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart index 4b608a9..9be3e63 100644 --- a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart +++ b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart b/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart index b7daca2..407a385 100644 --- a/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart +++ b/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart index 4fcee25..2833fb0 100644 --- a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart +++ b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart index 137484f..f711d7c 100644 --- a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart index df5579c..bd7f9df 100644 --- a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart +++ b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart index 8b3ea84..a7c0445 100644 --- a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:io'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart b/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart index 47b07a1..949774d 100644 --- a/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart +++ b/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart b/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart index 5625b73..5c6b8e9 100644 --- a/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart +++ b/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart b/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart index e5aaaca..59c617a 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart index 2c5f918..86309e5 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart index 9b81252..cbe8ef4 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart index b0fecb6..65b9af9 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart index 5227616..4b2dc1c 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart index c50259e..40b0152 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart +++ b/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart index 360608b..2abdb8c 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart index ed18082..bcfc67c 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart index a8e9f89..1bbfc59 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/core/util/converters/simple_converters/value_converter.dart'; +import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; import '../../../../../tracks/domain/shared/entities/tracks_collection_type.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart index f20eb46..9af02a2 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart +++ b/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart index ec38d9b..6157fd5 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class NetworkTracksCollectionsDataSource { diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart index 266c606..0d14cf3 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/converters/result_converters/result_value_converter.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/converters/result_converters/result_value_converter.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart index e23b530..bbf2f88 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/converters/result_converters/result_value_converter.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/converters/result_converters/result_value_converter.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart index f0771b0..b6141a8 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/util/converters/result_converters/result_value_converter.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/converters/result_converters/result_value_converter.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart index 6adb490..fae0227 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart +++ b/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart index 4486e2e..4670b6f 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart index 82f4e6c..17c5d0d 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart index 9daf74f..6a19866 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart +++ b/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart @@ -1,8 +1,8 @@ // ignore_for_file: prefer_void_to_null -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart index af540f2..e3b1442 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart index 30275cd..37800c5 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart index 0fa1dfc..ff5a96e 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart index 500a1a7..1fe4fe0 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart index 4fffd07..88b5fb9 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart +++ b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; -import 'package:spotify_downloader/core/util/use_case/use_case.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; class GetTracksCollectionByUrl implements UseCase { diff --git a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart index 72ce582..bdf4ec6 100644 --- a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart +++ b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart index 0624caf..6084428 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart index abf45ee..845924f 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart @@ -1,8 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart index cee396d..09e499d 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart index 12cf804..6664d22 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/result/result.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/result/result.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index f766a8a..cd27b81 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -6,9 +6,9 @@ import 'package:palette_generator/palette_generator.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart index f19e944..60aa16c 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart index 92426a3..d5b8901 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart @@ -5,7 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart index cf8527c..77cf639 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:spotify_downloader/core/util/util_methods.dart'; +import 'package:spotify_downloader/core/utils/util_methods.dart'; class GradientAppBarWithOpacity extends StatelessWidget { const GradientAppBarWithOpacity.visible( diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart index 067ba13..d3af6a6 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart index 623a8a8..d80d7e8 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; diff --git a/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart b/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart index 90659b6..f8ab8bc 100644 --- a/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart +++ b/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart @@ -1,10 +1,10 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/use_cases/clear_user_credentials.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/service/use_cases/authorize_user.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/use_cases/clear_user_credentials.dart'; +import 'package:spotify_downloader/features/data_domain/auth/service/use_cases/authorize_user.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart'; diff --git a/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart b/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart index 741ef13..bfea649 100644 --- a/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart +++ b/lib/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/local_auth/use_cases/use_cases.dart'; -import 'package:spotify_downloader/features/data_domain/auth/domain/shared/client_credentials.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/use_cases/use_cases.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/client_credentials.dart'; part 'client_auth_event.dart'; part 'client_auth_state.dart'; diff --git a/lib/features/presentation/settings/widgets/auth_settings/view/auth_settings.dart b/lib/features/presentation/settings/widgets/auth_settings/view/auth_settings.dart index 74ceb92..441a911 100644 --- a/lib/features/presentation/settings/widgets/auth_settings/view/auth_settings.dart +++ b/lib/features/presentation/settings/widgets/auth_settings/view/auth_settings.dart @@ -3,7 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/core/util/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/setting_with_text_field.dart'; diff --git a/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart b/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart index 62bfa78..395efc9 100644 --- a/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart +++ b/lib/features/presentation/settings/widgets/download_tracks_settings/bloc/download_tracks_settings_bloc.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/use_cases/use_cases.dart'; diff --git a/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart b/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart index 4f98a32..d1e3e54 100644 --- a/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart +++ b/lib/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/use_cases/use_cases.dart'; part 'language_setting_event.dart'; diff --git a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart index cfae434..4bb39d6 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/util/failures/failure.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; From 85debd09f910e9876e77be4153eb6590cb07a93b Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 2 Jun 2024 12:11:14 +1000 Subject: [PATCH 04/41] Final data/domain refactoring --- lib/core/app/router/router.dart | 4 +- lib/core/di/injector.dart | 90 +++++++++---------- .../auth/local_auth/domain/domain.dart | 2 +- .../auth/local_auth/domain/local_auth.dart | 2 - .../local_client_auth_repository.dart | 8 -- .../local_full_auth_repository.dart | 11 --- .../local_user_auth_repository.dart | 10 --- .../data_source/settings_data_source.dart | 5 +- .../repository/settings_repository_impl.dart | 10 +-- .../download_tracks_settings_repository.dart | 5 +- .../language_settings_repository.dart | 3 +- .../use_cases/get_available_languages.dart | 6 +- .../get_download_tracks_settings.dart | 8 +- .../domain/use_cases/get_language.dart | 6 +- .../save_download_tracks_setting.dart | 8 +- .../domain/use_cases/save_language.dart | 7 +- .../spotify_credentials_converter.dart | 4 +- .../spotify_requests_converter.dart | 4 +- .../spotify_profile_data_source.dart | 4 +- .../spotify_profile_repository_impl.dart | 7 +- .../spotify_profile_repostitory.dart | 5 +- .../service/spotify_profile_service.dart | 5 +- .../service/spotify_profile_service_impl.dart | 8 +- .../domain/use_cases/get_spotify_profile.dart | 8 +- .../data_domain/tracks/data/data.dart | 4 - .../models/local_tracks_collection_dto.dart | 10 --- .../models/tracks_getting_stream.dart | 9 -- .../data_domain/tracks/domain/domain.dart | 7 -- .../dowload_tracks_repository.dart | 13 --- .../repositories/local_tracks_repository.dart | 10 --- .../entities/tracks_getting_observer.dart | 9 -- .../network_tracks_repository.dart | 6 -- .../repository/loading_tracks_collection.dart | 9 -- .../search_videos_by_track_repository.dart | 10 --- .../use_cases/find_10_videos_by_track.dart | 18 ---- .../use_cases/get_video_by_url.dart | 17 ---- ...ith_loading_observer_getting_observer.dart | 15 ---- .../download_tracks_service.dart | 17 ---- .../get_tracks_service.dart | 9 -- .../use_cases/cancel_track_loading.dart | 17 ---- .../services/use_cases/download_track.dart | 17 ---- .../use_cases/download_tracks_range.dart | 16 ---- .../data/data.dart} | 0 .../data}/data_sources/data_sources.dart | 0 ...owload_audio_from_youtube_data_source.dart | 14 +-- .../audio_metadata_editor.dart | 2 +- .../audio_metadata_editor_impl.dart | 8 +- .../ffmpeg_file_to_mp3_converter.dart | 2 +- .../file_to_mp3_converter.dart | 0 .../data/data_sources/tools/tools.dart | 4 + .../dowload_audio_from_youtube_args.dart | 0 .../loading_stream/audio_loading_stream.dart | 4 +- .../models/loading_stream/loading_stream.dart | 0 .../data}/models/metadata/album_metadata.dart | 0 .../data}/models/metadata/audio_metadata.dart | 0 .../data}/models/metadata/metadata.dart | 0 .../data}/models/models.dart | 0 .../repositories/converters/converters.dart | 0 .../track_to_audio_metadata_converter.dart | 8 +- .../dowload_tracks_repository_impl.dart | 18 +--- .../data}/repositories/repositories.dart | 0 .../loading_track_info.dart | 4 +- .../repository_impl_classes.dart | 0 .../waiting_in_loading_queue_track_info.dart | 4 +- .../domain/domain.dart} | 0 .../domain}/entities/entities.dart | 0 .../domain}/entities/loading_track_id.dart | 2 +- .../entities/loading_track_observer.dart | 2 +- .../entities/loading_track_status.dart | 0 .../entities/track_loading_notifier.dart | 4 +- .../entities/track_with_lazy_youtube_url.dart | 5 +- .../dowload_tracks_repository.dart | 9 ++ .../domain}/repositories/repositories.dart | 0 .../download_tracks/download_tracks.dart | 2 + .../data/data.dart} | 0 .../data}/data_sources/data_sources.dart | 0 .../local_tracks_data_source.dart | 6 +- .../data}/models/local_track_dto.dart | 2 +- .../models/local_tracks_collection_dto.dart | 9 ++ .../local_tracks_collection_dto_type.dart | 0 .../local_tracks_collections_group_dto.dart | 0 .../data}/models/models.dart | 0 .../repositories/converters/converters.dart | 0 ...al_track_dto_to_local_track_converter.dart | 7 +- ..._to_local_tracks_collection_converter.dart | 8 +- ...ocal_tracks_collection_type_converter.dart | 5 +- ...al_tracks_collections_group_converter.dart | 5 +- .../local_tracks_repository_impl.dart | 10 +-- .../data}/repositories/repositories.dart | 0 .../domain/domain.dart} | 0 .../domain}/entities/entities.dart | 0 .../domain}/entities/local_track.dart | 2 +- .../entities/local_tracks_collection.dart | 3 +- .../local_tracks_collection_group.dart | 0 .../local_tracks_collection_type.dart | 0 .../repositories/local_tracks_repository.dart | 8 ++ .../domain}/repositories/repositories.dart | 0 .../tracks/local_tracks/local_tracks.dart | 2 + .../data/data.dart} | 0 .../data}/data_sources/data_sources.dart | 0 .../network_tracks_data_source.dart | 10 +-- .../data}/models/get_tracks_args.dart | 0 .../data}/models/models.dart | 0 .../tracks_dto_getting_ended_status.dart | 0 .../data/models/tracks_getting_stream.dart | 8 ++ .../repositories/converters/converters.dart | 0 .../track_dto_to_track_converter.dart | 7 +- .../network_tracks_repository_impl.dart | 18 ++-- .../data}/repositories/repositories.dart | 0 .../domain/domain.dart} | 0 .../domain}/entities/entities.dart | 0 ...et_tracks_from_tracks_collection_args.dart | 2 +- .../entities/tracks_getting_ended_status.dart | 0 .../entities/tracks_getting_observer.dart | 8 ++ .../network_tracks_repository.dart | 5 ++ .../domain}/repositories/repositories.dart | 0 .../tracks/network_tracks/network_tracks.dart | 2 + .../domain/domain.dart} | 0 .../domain}/entities/entities.dart | 0 .../loading_track_observer_with_id.dart | 2 +- .../loading_tracks_collection.dart | 0 .../loading_tracks_collection_controller.dart | 10 +-- .../loading_tracks_collection_info.dart | 2 +- .../loading_tracks_collection_observer.dart | 3 +- .../loading_tracks_collection_status.dart | 0 .../repository/loading_tracks_collection.dart | 8 ++ .../loading_tracks_collection_id.dart | 2 +- .../loading_tracks_collections_observer.dart | 2 +- .../entities/repository/repository.dart | 0 .../observe_tracks_loading_repository.dart | 7 +- ...bserve_tracks_loading_repository_impl.dart | 14 ++- .../domain}/repository/repository.dart | 0 ...t_loading_tracks_collections_observer.dart | 7 +- .../domain}/use_cases/use_cases.dart | 0 .../data/data.dart} | 0 .../data}/data_sources/data_sources.dart | 0 .../search_video_on_youtube_data_source.dart | 5 +- .../repositories/converters/converters.dart | 0 .../video_dto_to_video_converter.dart | 6 +- .../data}/repositories/repositories.dart | 0 ...earch_videos_by_track_repository_impl.dart | 10 +-- .../domain/domain.dart} | 0 .../domain}/entities/entities.dart | 0 .../domain}/entities/video.dart | 0 .../domain}/repositories/repositories.dart | 0 .../search_videos_by_track_repository.dart | 9 ++ .../use_cases/find_10_videos_by_track.dart | 15 ++++ .../domain/use_cases/get_video_by_url.dart | 14 +++ .../domain}/use_cases/use_cases.dart | 0 .../search_videos_by_track.dart | 2 + .../services/entities/entities.dart | 0 .../entities/track_with_loading_observer.dart | 4 +- ...ith_loading_observer_getting_observer.dart | 14 +++ .../{domain => }/services/services.dart | 0 .../download_tracks_service.dart | 15 ++++ .../download_tracks_service_impl.dart | 31 +++---- .../get_tracks_service.dart | 8 ++ .../get_tracks_service_impl.dart | 30 +++---- .../services/services/services.dart | 0 .../services/tools/save_path_generator.dart | 3 +- ...ocal_tracks_collection_type_converter.dart | 4 +- .../use_cases/cancel_track_loading.dart | 15 ++++ .../services/use_cases/download_track.dart | 15 ++++ ...download_tracks_from_getting_observer.dart | 7 +- .../use_cases/download_tracks_range.dart | 13 +++ ...ading_observer_from_tracks_collection.dart | 9 +- ...er_from_tracks_collection_with_offset.dart | 9 +- .../services/use_cases/use_cases.dart | 0 .../shared.dart => shared/domain/domain.dart} | 0 .../domain}/entities/album.dart | 0 .../domain}/entities/entities.dart | 0 .../domain}/entities/track.dart | 4 +- .../domain}/entities/tracks_collection.dart | 0 .../entities/tracks_collection_type.dart | 0 lib/features/data_domain/tracks/tracks.dart | 2 - .../tracks_collections/data/data.dart | 2 - .../tracks_collections/domain/domain.dart | 2 - .../network_tracks_collections_service.dart | 10 --- .../data/data.dart} | 0 .../data}/data_source/data_source.dart | 0 ...tracks_collectons_history_data_source.dart | 2 +- .../models/history_tracks_collection_dto.dart | 0 .../data}/models/models.dart | 0 .../repositories/converters/converters.dart | 0 .../history_tracks_collections_converter.dart | 4 +- ...story_tracks_collection_dto_converter.dart | 5 +- .../tracks_collection_types_converter.dart | 4 +- .../data}/repositories/repositories.dart | 0 ...s_collections_history_repository_impl.dart | 11 +-- .../domain/domain.dart} | 0 .../domain}/entities/entities.dart | 0 .../entities/history_tracks_collection.dart | 2 +- .../domain}/repositories/repositories.dart | 0 ...tracks_collections_history_repository.dart | 7 +- .../add_tracks_collection_to_history.dart | 8 +- .../use_cases/get_ordered_history.dart | 13 +-- .../domain}/use_cases/use_cases.dart | 0 .../history_tracks_collections.dart | 2 + .../data/data.dart} | 0 .../data}/data_source/data_source.dart | 0 ...etwork_tracks_collections_data_source.dart | 4 +- ...um_dto_to_tracks_collection_converter.dart | 9 +- .../repositories/converters/converters.dart | 0 ...st_dto_to_tracks_collection_converter.dart | 8 +- ...ck_dto_to_tracks_collection_converter.dart | 9 +- .../data}/repositories/repositories.dart | 0 .../tracks_collections_repository_impl.dart | 14 +-- .../domain/domain.dart} | 0 ...network_tracks_collections_repository.dart | 8 +- .../domain}/repositories/repositories.dart | 0 .../network_tracks_collections_service.dart | 8 ++ ...twork_tracks_collections_service_impl.dart | 11 +-- .../domain}/service/service.dart | 0 ...cks_collection_by_type_and_spotify_id.dart | 9 +- .../get_tracks_collection_by_url.dart | 9 +- .../domain}/use_cases/use_cases.dart | 0 .../network_tracks_collections.dart | 2 + .../tracks_collections.dart | 2 - .../bloc/change_source_video_bloc.dart | 8 +- .../view/change_source_video_screen.dart | 2 +- .../filter_tracks/filter_tracks_bloc.dart | 2 +- .../get_and_download_tracks_bloc.dart | 18 ++-- .../base/get_tracks_collection_bloc.dart | 4 +- ...get_tracks_collection_by_history_bloc.dart | 6 +- .../get_tracks_collection_by_url_bloc.dart | 4 +- .../download_tracks_collection_screen.dart | 2 +- .../bloc/download_track_info_bloc.dart | 6 +- .../view/download_track_info.dart | 2 +- ...download_track_info_status_tile_cubit.dart | 6 +- .../view/download_track_info_status_tile.dart | 2 +- .../track_tile/bloc/track_tile_bloc.dart | 12 +-- .../widgets/track_tile/view/track_tile.dart | 2 +- .../history/bloc/history_bloc.dart | 4 +- .../presentation/home/view/home_screen.dart | 2 +- .../loading_tracks_collections_list_bloc.dart | 6 +- .../view/loading_tracks_collections_list.dart | 2 +- .../loading_tracks_collection_tile_cubit.dart | 4 +- .../view/loading_tracks_collection_tile.dart | 4 +- ...ollections_loading_notifications_bloc.dart | 8 +- 239 files changed, 493 insertions(+), 741 deletions(-) delete mode 100644 lib/features/data_domain/auth/local_auth/domain/local_auth.dart delete mode 100644 lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart delete mode 100644 lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart delete mode 100644 lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart delete mode 100644 lib/features/data_domain/tracks/data/data.dart delete mode 100644 lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart delete mode 100644 lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart delete mode 100644 lib/features/data_domain/tracks/domain/domain.dart delete mode 100644 lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart delete mode 100644 lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart delete mode 100644 lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart delete mode 100644 lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart delete mode 100644 lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart delete mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart delete mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart delete mode 100644 lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart delete mode 100644 lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart delete mode 100644 lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart delete mode 100644 lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart delete mode 100644 lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart delete mode 100644 lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart delete mode 100644 lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart rename lib/features/data_domain/tracks/{data/dowload_tracks/dowload_tracks.dart => download_tracks/data/data.dart} (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/data_sources/data_sources.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/data_sources/dowload_audio_from_youtube_data_source.dart (89%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart (86%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart (81%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart (79%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart (100%) create mode 100644 lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/tools.dart rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/dowload_audio_from_youtube_args.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/loading_stream/audio_loading_stream.dart (86%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/loading_stream/loading_stream.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/metadata/album_metadata.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/metadata/audio_metadata.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/metadata/metadata.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/models/models.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/converters/converters.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/converters/track_to_audio_metadata_converter.dart (57%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/dowload_tracks_repository_impl.dart (78%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/repository_impl_classes/loading_track_info.dart (52%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/repository_impl_classes/repository_impl_classes.dart (100%) rename lib/features/data_domain/tracks/{data/dowload_tracks => download_tracks/data}/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart (56%) rename lib/features/data_domain/tracks/{domain/download_tracks/download_tracks.dart => download_tracks/domain/domain.dart} (100%) rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/entities/loading_track_id.dart (79%) rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/entities/loading_track_observer.dart (96%) rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/entities/loading_track_status.dart (100%) rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/entities/track_loading_notifier.dart (95%) rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/entities/track_with_lazy_youtube_url.dart (71%) create mode 100644 lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart rename lib/features/data_domain/tracks/{domain/download_tracks => download_tracks/domain}/repositories/repositories.dart (100%) create mode 100644 lib/features/data_domain/tracks/download_tracks/download_tracks.dart rename lib/features/data_domain/tracks/{data/local_tracks/local_tracks.dart => local_tracks/data/data.dart} (100%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/data_sources/data_sources.dart (100%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/data_sources/local_tracks_data_source.dart (88%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/models/local_track_dto.dart (69%) create mode 100644 lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto.dart rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/models/local_tracks_collection_dto_type.dart (100%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/models/local_tracks_collections_group_dto.dart (100%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/models/models.dart (100%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/converters/converters.dart (100%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/converters/local_track_dto_to_local_track_converter.dart (61%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart (62%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart (79%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart (59%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/local_tracks_repository_impl.dart (63%) rename lib/features/data_domain/tracks/{data/local_tracks => local_tracks/data}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks/{domain/local_tracks/local_tracks.dart => local_tracks/domain/domain.dart} (100%) rename lib/features/data_domain/tracks/{domain/local_tracks => local_tracks/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain/local_tracks => local_tracks/domain}/entities/local_track.dart (68%) rename lib/features/data_domain/tracks/{domain/local_tracks => local_tracks/domain}/entities/local_tracks_collection.dart (66%) rename lib/features/data_domain/tracks/{domain/local_tracks => local_tracks/domain}/entities/local_tracks_collection_group.dart (100%) rename lib/features/data_domain/tracks/{domain/local_tracks => local_tracks/domain}/entities/local_tracks_collection_type.dart (100%) create mode 100644 lib/features/data_domain/tracks/local_tracks/domain/repositories/local_tracks_repository.dart rename lib/features/data_domain/tracks/{domain/local_tracks => local_tracks/domain}/repositories/repositories.dart (100%) create mode 100644 lib/features/data_domain/tracks/local_tracks/local_tracks.dart rename lib/features/data_domain/tracks/{data/network_tracks/network_tracks.dart => network_tracks/data/data.dart} (100%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/data_sources/data_sources.dart (100%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/data_sources/network_tracks_data_source.dart (93%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/models/get_tracks_args.dart (100%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/models/models.dart (100%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/models/tracks_dto_getting_ended_status.dart (100%) create mode 100644 lib/features/data_domain/tracks/network_tracks/data/models/tracks_getting_stream.dart rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/repositories/converters/converters.dart (100%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/repositories/converters/track_dto_to_track_converter.dart (72%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/repositories/network_tracks_repository_impl.dart (67%) rename lib/features/data_domain/tracks/{data/network_tracks => network_tracks/data}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks/{domain/network_tracks/network_tracks.dart => network_tracks/domain/domain.dart} (100%) rename lib/features/data_domain/tracks/{domain/network_tracks => network_tracks/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain/network_tracks => network_tracks/domain}/entities/get_tracks_from_tracks_collection_args.dart (78%) rename lib/features/data_domain/tracks/{domain/network_tracks => network_tracks/domain}/entities/tracks_getting_ended_status.dart (100%) create mode 100644 lib/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_observer.dart create mode 100644 lib/features/data_domain/tracks/network_tracks/domain/repositories/network_tracks_repository.dart rename lib/features/data_domain/tracks/{domain/network_tracks => network_tracks/domain}/repositories/repositories.dart (100%) create mode 100644 lib/features/data_domain/tracks/network_tracks/network_tracks.dart rename lib/features/data_domain/tracks/{domain/observe_tracks_loading/observe_tracks_loading.dart => observe_tracks_loading/domain/domain.dart} (100%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/loading_tracks_collection/loading_track_observer_with_id.dart (81%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/loading_tracks_collection/loading_tracks_collection.dart (100%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/loading_tracks_collection/loading_tracks_collection_controller.dart (84%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/loading_tracks_collection/loading_tracks_collection_info.dart (87%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/loading_tracks_collection/loading_tracks_collection_observer.dart (80%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/loading_tracks_collection/loading_tracks_collection_status.dart (100%) create mode 100644 lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection.dart rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/repository/loading_tracks_collection_id.dart (75%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/repository/loading_tracks_collections_observer.dart (82%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/entities/repository/repository.dart (100%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/repository/observe_tracks_loading_repository.dart (51%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/repository/observe_tracks_loading_repository_impl.dart (62%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/repository/repository.dart (100%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/use_cases/get_loading_tracks_collections_observer.dart (50%) rename lib/features/data_domain/tracks/{domain/observe_tracks_loading => observe_tracks_loading/domain}/use_cases/use_cases.dart (100%) rename lib/features/data_domain/tracks/{data/search_videos_by_track/search_videos_by_track.dart => search_videos_by_track/data/data.dart} (100%) rename lib/features/data_domain/tracks/{data/search_videos_by_track => search_videos_by_track/data}/data_sources/data_sources.dart (100%) rename lib/features/data_domain/tracks/{data/search_videos_by_track => search_videos_by_track/data}/data_sources/search_video_on_youtube_data_source.dart (88%) rename lib/features/data_domain/tracks/{data/search_videos_by_track => search_videos_by_track/data}/repositories/converters/converters.dart (100%) rename lib/features/data_domain/tracks/{data/search_videos_by_track => search_videos_by_track/data}/repositories/converters/video_dto_to_video_converter.dart (67%) rename lib/features/data_domain/tracks/{data/search_videos_by_track => search_videos_by_track/data}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks/{data/search_videos_by_track => search_videos_by_track/data}/repositories/search_videos_by_track_repository_impl.dart (81%) rename lib/features/data_domain/tracks/{domain/search_videos_by_track/search_videos_by_track.dart => search_videos_by_track/domain/domain.dart} (100%) rename lib/features/data_domain/tracks/{domain/search_videos_by_track => search_videos_by_track/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain/search_videos_by_track => search_videos_by_track/domain}/entities/video.dart (100%) rename lib/features/data_domain/tracks/{domain/search_videos_by_track => search_videos_by_track/domain}/repositories/repositories.dart (100%) create mode 100644 lib/features/data_domain/tracks/search_videos_by_track/domain/repositories/search_videos_by_track_repository.dart create mode 100644 lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart create mode 100644 lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart rename lib/features/data_domain/tracks/{domain/search_videos_by_track => search_videos_by_track/domain}/use_cases/use_cases.dart (100%) create mode 100644 lib/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart rename lib/features/data_domain/tracks/{domain => }/services/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain => }/services/entities/track_with_loading_observer.dart (84%) create mode 100644 lib/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart rename lib/features/data_domain/tracks/{domain => }/services/services.dart (100%) create mode 100644 lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart rename lib/features/data_domain/tracks/{domain => }/services/services/download_tracks_service/download_tracks_service_impl.dart (70%) create mode 100644 lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service.dart rename lib/features/data_domain/tracks/{domain => }/services/services/get_tracks_service/get_tracks_service_impl.dart (72%) rename lib/features/data_domain/tracks/{domain => }/services/services/services.dart (100%) rename lib/features/data_domain/tracks/{domain => }/services/services/tools/save_path_generator.dart (85%) rename lib/features/data_domain/tracks/{domain => }/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart (78%) create mode 100644 lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart create mode 100644 lib/features/data_domain/tracks/services/use_cases/download_track.dart rename lib/features/data_domain/tracks/{domain => }/services/use_cases/download_tracks_from_getting_observer.dart (51%) create mode 100644 lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart rename lib/features/data_domain/tracks/{domain => }/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart (50%) rename lib/features/data_domain/tracks/{domain => }/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart (52%) rename lib/features/data_domain/tracks/{domain => }/services/use_cases/use_cases.dart (100%) rename lib/features/data_domain/tracks/{domain/shared/shared.dart => shared/domain/domain.dart} (100%) rename lib/features/data_domain/tracks/{domain/shared => shared/domain}/entities/album.dart (100%) rename lib/features/data_domain/tracks/{domain/shared => shared/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks/{domain/shared => shared/domain}/entities/track.dart (68%) rename lib/features/data_domain/tracks/{domain/shared => shared/domain}/entities/tracks_collection.dart (100%) rename lib/features/data_domain/tracks/{domain/shared => shared/domain}/entities/tracks_collection_type.dart (100%) delete mode 100644 lib/features/data_domain/tracks/tracks.dart delete mode 100644 lib/features/data_domain/tracks_collections/data/data.dart delete mode 100644 lib/features/data_domain/tracks_collections/domain/domain.dart delete mode 100644 lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons/history_tracks_collectons.dart => history_tracks_collections/data/data.dart} (100%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/data_source/data_source.dart (100%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/data_source/tracks_collectons_history_data_source.dart (96%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/models/history_tracks_collection_dto.dart (100%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/models/models.dart (100%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/repositories/converters/converters.dart (100%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/repositories/converters/history_tracks_collections_converter.dart (75%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart (71%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/repositories/converters/tracks_collection_types_converter.dart (88%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks_collections/{data/history_tracks_collectons => history_tracks_collections/data}/repositories/tracks_collections_history_repository_impl.dart (69%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons/history_tracks_collectons.dart => history_tracks_collections/domain/domain.dart} (100%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/entities/entities.dart (100%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/entities/history_tracks_collection.dart (84%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/repositories/tracks_collections_history_repository.dart (55%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/use_cases/add_tracks_collection_to_history.dart (58%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/use_cases/get_ordered_history.dart (52%) rename lib/features/data_domain/tracks_collections/{domain/history_tracks_collectons => history_tracks_collections/domain}/use_cases/use_cases.dart (100%) create mode 100644 lib/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections/network_tracks_collections.dart => network_tracks_collections/data/data.dart} (100%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/data_source/data_source.dart (100%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/data_source/network_tracks_collections_data_source.dart (88%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/repositories/converters/album_dto_to_tracks_collection_converter.dart (63%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/repositories/converters/converters.dart (100%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/repositories/converters/playlist_dto_to_tracks_collection_converter.dart (64%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/repositories/converters/track_dto_to_tracks_collection_converter.dart (63%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/repositories/repositories.dart (100%) rename lib/features/data_domain/tracks_collections/{data/network_tracks_collections => network_tracks_collections/data}/repositories/tracks_collections_repository_impl.dart (74%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections/network_tracks_collections.dart => network_tracks_collections/domain/domain.dart} (100%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/repositories/network_tracks_collections_repository.dart (56%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/repositories/repositories.dart (100%) create mode 100644 lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service.dart rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/service/network_tracks_collections_service_impl.dart (74%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/service/service.dart (100%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/use_cases/get_tracks_collection_by_type_and_spotify_id.dart (50%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/use_cases/get_tracks_collection_by_url.dart (51%) rename lib/features/data_domain/tracks_collections/{domain/network_tracks_collections => network_tracks_collections/domain}/use_cases/use_cases.dart (100%) create mode 100644 lib/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart delete mode 100644 lib/features/data_domain/tracks_collections/tracks_collections.dart diff --git a/lib/core/app/router/router.dart b/lib/core/app/router/router.dart index 98a1d1b..af92583 100644 --- a/lib/core/app/router/router.dart +++ b/lib/core/app/router/router.dart @@ -1,7 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/foundation.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/about_app/view/about_app_screen.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/view/change_source_video_screen.dart'; import 'package:spotify_downloader/features/presentation/history/view/history_screen.dart'; diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index a80ea09..bfcc9f7 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -5,56 +5,56 @@ import 'package:spotify_downloader/core/permissions/permissions_manager.dart'; import 'package:spotify_downloader/core/permissions/requiring_permission_services_initializer.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/data_sources/local_tracks_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/repositories/local_tracks_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/tracks_collectons_history_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/tracks_collections_history_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/repositories/dowload_tracks_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/data/data_sources/search_video_on_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/data/repositories/search_videos_by_track_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/network_tracks_collections_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/tracks_collections_repository_impl.dart'; import 'package:spotify_downloader/features/data_domain/auth/auth.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart'; import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/domain/repositories/local_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_range.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/tracks_collections_history_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/repositories/network_tracks_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/repositories/search_videos_by_track_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/network_tracks_collections_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service_impl.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; diff --git a/lib/features/data_domain/auth/local_auth/domain/domain.dart b/lib/features/data_domain/auth/local_auth/domain/domain.dart index 3d91876..d529d27 100644 --- a/lib/features/data_domain/auth/local_auth/domain/domain.dart +++ b/lib/features/data_domain/auth/local_auth/domain/domain.dart @@ -1,2 +1,2 @@ export 'repositories/repositories.dart'; -export 'use_cases/use_cases.dart'; +export 'use_cases/use_cases.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/auth/local_auth/domain/local_auth.dart b/lib/features/data_domain/auth/local_auth/domain/local_auth.dart deleted file mode 100644 index 3d91876..0000000 --- a/lib/features/data_domain/auth/local_auth/domain/local_auth.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'repositories/repositories.dart'; -export 'use_cases/use_cases.dart'; diff --git a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart deleted file mode 100644 index e5bc725..0000000 --- a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_client_auth_repository.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/shared/client_credentials.dart'; - -abstract class LocalClientAuthRepository { - Future> getClientCredentials(); - Future> saveClientCredentials(ClientCredentials clientCredentials); -} diff --git a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart deleted file mode 100644 index b2ea5b3..0000000 --- a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_full_auth_repository.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/shared/full_credentials.dart'; - - -abstract class LocalFullAuthRepository { - Future> getFullCredentials(); - - Future> saveFullCredentials(FullCredentials fullCredentials); -} diff --git a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart b/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart deleted file mode 100644 index caf4046..0000000 --- a/lib/features/data_domain/auth/local_auth/local_auth/repositories/local_user_auth_repository.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; - -import 'package:spotify_downloader/features/data_domain/auth/shared/user_credentials.dart'; - -abstract class LocalUserAuthRepository { - Future> clearUserCredentials(); - - Future> saveUserCredentials(UserCredentials userCredentials); -} diff --git a/lib/features/data_domain/settings/data/data_source/settings_data_source.dart b/lib/features/data_domain/settings/data/data_source/settings_data_source.dart index 89399ab..6b4d3da 100644 --- a/lib/features/data_domain/settings/data/data_source/settings_data_source.dart +++ b/lib/features/data_domain/settings/data/data_source/settings_data_source.dart @@ -3,9 +3,8 @@ import 'dart:io'; import 'package:path_provider/path_provider.dart'; import 'package:spotify_downloader/core/consts/local_paths.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/settings/data/models/app_settings.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/data/data.dart'; class SettingsDataSource { Future saveSettings(AppSettings appSettings) async { diff --git a/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart b/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart index dafe8a9..16c400b 100644 --- a/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart +++ b/lib/features/data_domain/settings/data/repository/settings_repository_impl.dart @@ -1,11 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/settings/data/data_source/settings_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/settings/data/models/app_settings.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/settings.dart'; class SettingsRepositoryImpl implements DownloadTracksSettingsRepository, LanguageSettingsRepository { SettingsRepositoryImpl({required SettingsDataSource settingsDataSource}) : _settingsDataSource = settingsDataSource; diff --git a/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart b/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart index 8ef5542..d04ee7f 100644 --- a/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart +++ b/lib/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart @@ -1,6 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; abstract class DownloadTracksSettingsRepository { Future> getDownloadTracksSettings(); diff --git a/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart b/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart index e1b9565..c45240f 100644 --- a/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart +++ b/lib/features/data_domain/settings/domain/repository/language_settings_repository.dart @@ -1,5 +1,4 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; abstract class LanguageSettingsRepository { Future> getLanguage(); diff --git a/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart b/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart index 5400238..cf40a27 100644 --- a/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_available_languages.dart @@ -1,7 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/repository/repository.dart'; class GetAvailableLanguages implements UseCase, void> { GetAvailableLanguages({required LanguageSettingsRepository languageSettingsRepository}) diff --git a/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart b/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart index fbbdf65..51e1a0a 100644 --- a/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_download_tracks_settings.dart @@ -1,8 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/domain.dart'; + class GetDownloadTracksSettings implements UseCase { GetDownloadTracksSettings({required DownloadTracksSettingsRepository downloadTracksSettingsRepository}) : _downloadTracksSettingsRepository = downloadTracksSettingsRepository; diff --git a/lib/features/data_domain/settings/domain/use_cases/get_language.dart b/lib/features/data_domain/settings/domain/use_cases/get_language.dart index 0474754..36a5ddb 100644 --- a/lib/features/data_domain/settings/domain/use_cases/get_language.dart +++ b/lib/features/data_domain/settings/domain/use_cases/get_language.dart @@ -1,7 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/domain.dart'; class GetLanguage implements UseCase { GetLanguage({required LanguageSettingsRepository languageSettingsRepository}) diff --git a/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart b/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart index 12be536..ef06b67 100644 --- a/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart +++ b/lib/features/data_domain/settings/domain/use_cases/save_download_tracks_setting.dart @@ -1,9 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/download_tracks_settings.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; - +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/domain.dart'; class SaveDownloadTracksSettings implements UseCase { SaveDownloadTracksSettings({required DownloadTracksSettingsRepository downloadTracksSettingsRepository}) diff --git a/lib/features/data_domain/settings/domain/use_cases/save_language.dart b/lib/features/data_domain/settings/domain/use_cases/save_language.dart index e481c16..2dbd756 100644 --- a/lib/features/data_domain/settings/domain/use_cases/save_language.dart +++ b/lib/features/data_domain/settings/domain/use_cases/save_language.dart @@ -1,8 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/repository/language_settings_repository.dart'; - +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/domain.dart'; class SaveLanguage implements UseCase { SaveLanguage({required LanguageSettingsRepository languageSettingsRepository}) diff --git a/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart b/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart index e73df32..bdd25c0 100644 --- a/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart +++ b/lib/features/data_domain/shared/data/converters/spotify_credentials_converter.dart @@ -1,7 +1,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotify_downloader/core/consts/spotify_client.dart'; -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/auth/shared/full_credentials.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/shared/shared.dart'; class SpotifyCredentialsConverter implements ValueConverter { diff --git a/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart b/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart index 0acbc3c..0a23009 100644 --- a/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart +++ b/lib/features/data_domain/shared/data/converters/spotify_requests_converter.dart @@ -1,6 +1,6 @@ -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_credentials_converter.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; class SpotifyRequestsConverter implements ValueConverter { diff --git a/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart b/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart index 2b8e288..c849204 100644 --- a/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart +++ b/lib/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart @@ -1,7 +1,5 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/util_methods.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class SpotifyProfileDataSource { diff --git a/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart b/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart index a162b2b..bced286 100644 --- a/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart +++ b/lib/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart @@ -1,10 +1,7 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/spotify_profile.dart'; class SpotifyProfileRepositoryImpl implements SpotifyProfileRepository { SpotifyProfileRepositoryImpl({required SpotifyProfileDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart b/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart index 7abd5dd..8b8fd68 100644 --- a/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart +++ b/lib/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart @@ -1,7 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/domain.dart'; abstract class SpotifyProfileRepository { Future> getSpotifyProfile(SpotifyRepositoryRequest spotifyClientRequest); diff --git a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart index 9dd2da0..25fbfbf 100644 --- a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart +++ b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart @@ -1,6 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/domain.dart'; abstract class SpotifyProfileService { Future> getSpotifyProfile(); diff --git a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart index 7f0beca..73a09ec 100644 --- a/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart +++ b/lib/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart @@ -1,11 +1,7 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/domain.dart'; class SpotifyProfileServiceImpl extends SpotifyProfileService { SpotifyProfileServiceImpl( diff --git a/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart b/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart index cdf4be3..0820d2a 100644 --- a/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart +++ b/lib/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart @@ -1,9 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; - -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/entities/spotify_profile.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/domain.dart'; class GetSpotifyProfile implements UseCase { GetSpotifyProfile({required SpotifyProfileService spotifyProfileService}) diff --git a/lib/features/data_domain/tracks/data/data.dart b/lib/features/data_domain/tracks/data/data.dart deleted file mode 100644 index eb40df5..0000000 --- a/lib/features/data_domain/tracks/data/data.dart +++ /dev/null @@ -1,4 +0,0 @@ -export 'dowload_tracks/dowload_tracks.dart'; -export 'local_tracks/local_tracks.dart'; -export 'network_tracks/network_tracks.dart'; -export 'search_videos_by_track/search_videos_by_track.dart'; diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart b/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart deleted file mode 100644 index 502f095..0000000 --- a/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; - -class LocalTracksCollectionDto { - LocalTracksCollectionDto({required this.group, required this.spotifyId, required this.type}); - - final String spotifyId; - final LocalTracksCollectionDtoType type; - final LocalTracksCollectionsGroupDto group; -} diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart b/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart deleted file mode 100644 index 34b5f3c..0000000 --- a/lib/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; - -class TracksGettingStream { - Function(Result)? onEnded; - Function(List)? onPartGot; -} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/domain.dart b/lib/features/data_domain/tracks/domain/domain.dart deleted file mode 100644 index 586c946..0000000 --- a/lib/features/data_domain/tracks/domain/domain.dart +++ /dev/null @@ -1,7 +0,0 @@ -export 'download_tracks/download_tracks.dart'; -export 'local_tracks/local_tracks.dart'; -export 'network_tracks/network_tracks.dart'; -export 'observe_tracks_loading/observe_tracks_loading.dart'; -export 'search_videos_by_track/search_videos_by_track.dart'; -export 'services/services.dart'; -export 'shared/shared.dart'; diff --git a/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart b/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart deleted file mode 100644 index 0360a13..0000000 --- a/lib/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart +++ /dev/null @@ -1,13 +0,0 @@ -// ignore_for_file: void_checks - -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -abstract class DownloadTracksRepository { - Future> dowloadTrack(TrackWithLazyYoutubeUrl lazyTrack, String savePath); - Result cancelTrackLoading(Track track, String savePat); - Future> getLoadingTrackObserver(Track track, String savePath); -} diff --git a/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart b/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart deleted file mode 100644 index 3e37ad5..0000000 --- a/lib/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; - -abstract class LocalTracksRepository { - Future> getLocalTrack(LocalTracksCollection localTracksCollection, String spotifyId); - Future> saveLocalTrack(LocalTrack localTrack); - Future> removeLocalTrack(LocalTrack localTrack); -} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart b/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart deleted file mode 100644 index 60e25b5..0000000 --- a/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -class TracksGettingObserver { - Function(Result)? onEnded; - Function(Iterable)? onPartGot; -} diff --git a/lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart b/lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart deleted file mode 100644 index 3a21e60..0000000 --- a/lib/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart'; - -abstract class NetworkTracksRepository { - Future getTracksFromTracksCollection(GetTracksFromTracksCollectionArgs args); -} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart b/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart deleted file mode 100644 index 4ca2792..0000000 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart'; - -class LoadingTracksCollection { - LoadingTracksCollection({required this.id, required this.controller}); - - final LoadingTracksCollectionId id; - final LoadingTracksCollectionController controller; -} diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart deleted file mode 100644 index 78b50eb..0000000 --- a/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -abstract class SearchVideosByTrackRepository { - Future> findVideoByTrack(Track track); - Future>> findVideosByTrack(Track track, int count); - Future> getVideoByUrl(String url); -} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart deleted file mode 100644 index 8c41a7f..0000000 --- a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -class Find10VideosByTrack implements UseCase, Track> { - Find10VideosByTrack({required SearchVideosByTrackRepository searchVideosByTrackRepository}) - : _searchVideosByTrackRepository = searchVideosByTrackRepository; - - final SearchVideosByTrackRepository _searchVideosByTrackRepository; - - @override - Future>> call(Track track) { - return _searchVideosByTrackRepository.findVideosByTrack(track, 10); - } -} diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart b/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart deleted file mode 100644 index 9be3e63..0000000 --- a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; - -class GetVideoByUrl implements UseCase { - GetVideoByUrl({required SearchVideosByTrackRepository searchVideosByTrackRepository}) - : _searchVideosByTrackRepository = searchVideosByTrackRepository; - - final SearchVideosByTrackRepository _searchVideosByTrackRepository; - - @override - Future> call(String url) { - return _searchVideosByTrackRepository.getVideoByUrl(url); - } -} diff --git a/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart b/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart deleted file mode 100644 index 407a385..0000000 --- a/lib/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; - -class TracksWithLoadingObserverGettingObserver { - TracksWithLoadingObserverGettingObserver({ - required this.onEnded, - required this.onPartGot, - }); - - - Stream> onEnded; - Stream> onPartGot; -} diff --git a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart deleted file mode 100644 index 2833fb0..0000000 --- a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -abstract class DownloadTracksService { - Future> downloadTrack(Track track); - - Future> downloadTracksRange(List tracksWithLoadingObservers); - - Future> downloadTracksFromGettingObserver( - TracksWithLoadingObserverGettingObserver tracksWithLoadingObserverGettingObserver); - - Future> cancelTrackLoading(Track track); -} diff --git a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart b/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart deleted file mode 100644 index bd7f9df..0000000 --- a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; - -abstract class GetTracksService { - Future> getTracksWithLoadingObserversFromTracksColleciton( - {required TracksCollection tracksCollection, required int offset}); -} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart b/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart deleted file mode 100644 index 59c617a..0000000 --- a/lib/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -class CancelTrackLoading implements UseCase { - CancelTrackLoading({required DownloadTracksService dowloadTracksService}) - : _dowloadTracksService = dowloadTracksService; - - final DownloadTracksService _dowloadTracksService; - - @override - Future> call(Track track) async { - return _dowloadTracksService.cancelTrackLoading(track); - } -} diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart deleted file mode 100644 index 86309e5..0000000 --- a/lib/features/data_domain/tracks/domain/services/use_cases/download_track.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -class DownloadTrack implements UseCase { - DownloadTrack({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; - - final DownloadTracksService _downloadTracksService; - - @override - Future> call(Track track) async { - return _downloadTracksService.downloadTrack(track); - } -} diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart b/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart deleted file mode 100644 index 65b9af9..0000000 --- a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; - -class DownloadTracksRange implements UseCase> { - DownloadTracksRange({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; - - final DownloadTracksService _downloadTracksService; - - @override - Future> call(List tracks) async { - return _downloadTracksService.downloadTracksRange(tracks); - } -} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/dowload_tracks.dart b/lib/features/data_domain/tracks/download_tracks/data/data.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/dowload_tracks.dart rename to lib/features/data_domain/tracks/download_tracks/data/data.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/data_sources.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/data_sources.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/data_sources/data_sources.dart rename to lib/features/data_domain/tracks/download_tracks/data/data_sources/data_sources.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart similarity index 89% rename from lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart rename to lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart index 6d4e4cc..2a4ea9f 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart @@ -5,19 +5,11 @@ import 'dart:io'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:http/http.dart'; import 'package:path/path.dart' as p; -import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token.dart'; -import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_source.dart'; -import 'package:spotify_downloader/core/utils/isolate_pool/isolate_pool.dart'; -import 'package:spotify_downloader/core/utils/result/cancellable_result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/tools.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; - -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart'; class DownloadAudioFromYoutubeDataSource { DownloadAudioFromYoutubeDataSource( diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart similarity index 86% rename from lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart rename to lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart index fc5e1e9..43754ae 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/models/metadata/audio_metadata.dart'; abstract class AudioMetadataEditor { Future> changeAudioMetadata({required String audioPath, required AudioMetadata audioMetadata}); diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart similarity index 81% rename from lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart rename to lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart index cbf2396..dd0b27d 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart @@ -2,11 +2,9 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:metadata_god/metadata_god.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/models/metadata/audio_metadata.dart'; import 'package:http/http.dart' as http; class AudioMetadataEditorImpl implements AudioMetadataEditor { diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart similarity index 79% rename from lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart rename to lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart index 5a9ab14..475349f 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart @@ -1,5 +1,5 @@ import 'package:ffmpeg_kit_flutter_full/ffmpeg_kit.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart'; class FFmpegFileToMp3Converter implements FileToMp3Converter { @override diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart rename to lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/file_to_mp3_converter.dart diff --git a/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/tools.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/tools.dart new file mode 100644 index 0000000..6cca6c1 --- /dev/null +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/tools/tools.dart @@ -0,0 +1,4 @@ +export 'audio_metadata_editor/audio_metadata_editor.dart'; +export 'audio_metadata_editor/audio_metadata_editor_impl.dart'; +export 'file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart'; +export 'file_to_mp3_converter/file_to_mp3_converter.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart b/lib/features/data_domain/tracks/download_tracks/data/models/dowload_audio_from_youtube_args.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/dowload_audio_from_youtube_args.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart b/lib/features/data_domain/tracks/download_tracks/data/models/loading_stream/audio_loading_stream.dart similarity index 86% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/loading_stream/audio_loading_stream.dart index 11e3b6f..5253aa6 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/models/loading_stream/audio_loading_stream.dart @@ -1,6 +1,6 @@ import 'dart:math'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/cancellable_result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; + class AudioLoadingStream { AudioLoadingStream( diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/loading_stream.dart b/lib/features/data_domain/tracks/download_tracks/data/models/loading_stream/loading_stream.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/loading_stream.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/loading_stream/loading_stream.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart b/lib/features/data_domain/tracks/download_tracks/data/models/metadata/album_metadata.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/metadata/album_metadata.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart b/lib/features/data_domain/tracks/download_tracks/data/models/metadata/audio_metadata.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/metadata/audio_metadata.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/metadata.dart b/lib/features/data_domain/tracks/download_tracks/data/models/metadata/metadata.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/metadata/metadata.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/metadata/metadata.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/models/models.dart b/lib/features/data_domain/tracks/download_tracks/data/models/models.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/models/models.dart rename to lib/features/data_domain/tracks/download_tracks/data/models/models.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/converters.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/converters/converters.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/converters.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/converters/converters.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/converters/track_to_audio_metadata_converter.dart similarity index 57% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/converters/track_to_audio_metadata_converter.dart index 0e797d4..467610b 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/repositories/converters/track_to_audio_metadata_converter.dart @@ -1,8 +1,6 @@ -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/core/utils/util_methods.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/album_metadata.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/metadata/audio_metadata.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; class TrackToAudioMetadataConverter implements ValueConverter { @override diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/dowload_tracks_repository_impl.dart similarity index 78% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/dowload_tracks_repository_impl.dart index aed5acd..8963550 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/dowload_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/repositories/dowload_tracks_repository_impl.dart @@ -1,18 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/cancellable_result.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/data_sources/dowload_audio_from_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/dowload_audio_from_youtube_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/converters/track_to_audio_metadata_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; class DowloadTracksRepositoryImpl implements DownloadTracksRepository { DowloadTracksRepositoryImpl({required DownloadAudioFromYoutubeDataSource dowloadAudioFromYoutubeDataSource}) diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/repositories.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/loading_track_info.dart similarity index 52% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/loading_track_info.dart index 83560a5..86e28a6 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/loading_track_info.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/loading_track_info.dart @@ -1,6 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/data/dowload_tracks/models/loading_stream/audio_loading_stream.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; class LoadingTrackInfo { LoadingTrackInfo( diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/repository_impl_classes.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/repository_impl_classes.dart similarity index 100% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/repository_impl_classes.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/repository_impl_classes.dart diff --git a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart b/lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart similarity index 56% rename from lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart rename to lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart index 47dc6ef..d285ea5 100644 --- a/lib/features/data_domain/tracks/data/dowload_tracks/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/repositories/repository_impl_classes/waiting_in_loading_queue_track_info.dart @@ -1,6 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/entities.dart'; class WaitingInLoadingQueueTrackInfo { WaitingInLoadingQueueTrackInfo( diff --git a/lib/features/data_domain/tracks/domain/download_tracks/download_tracks.dart b/lib/features/data_domain/tracks/download_tracks/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/download_tracks/download_tracks.dart rename to lib/features/data_domain/tracks/download_tracks/domain/domain.dart diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/entities.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/download_tracks/entities/entities.dart rename to lib/features/data_domain/tracks/download_tracks/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_id.dart similarity index 79% rename from lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart rename to lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_id.dart index 3502502..2c79214 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_id.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_id.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart'; class LoadingTrackId extends Equatable { const LoadingTrackId({required this.parentSpotifyId, required this.parentType, required this.spotifyId, required this.savePath}); diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart similarity index 96% rename from lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart rename to lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart index 7c6cba1..240b95e 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; class LoadingTrackObserver { LoadingTrackObserver( diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart rename to lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart similarity index 95% rename from lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart rename to lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart index 481f249..0042f57 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; class TrackLoadingNotifier { final StreamController _startLoadingStreamController = StreamController(); diff --git a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart similarity index 71% rename from lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart rename to lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart index 701b2f8..cbc605b 100644 --- a/lib/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart @@ -1,6 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; class TrackWithLazyYoutubeUrl { TrackWithLazyYoutubeUrl({required this.track, required this.getYoutubeUrlFunction}); diff --git a/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart b/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart new file mode 100644 index 0000000..10fcce7 --- /dev/null +++ b/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart @@ -0,0 +1,9 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + +abstract class DownloadTracksRepository { + Future> dowloadTrack(TrackWithLazyYoutubeUrl lazyTrack, String savePath); + Result cancelTrackLoading(Track track, String savePat); + Future> getLoadingTrackObserver(Track track, String savePath); +} diff --git a/lib/features/data_domain/tracks/domain/download_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/download_tracks/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/download_tracks/repositories/repositories.dart rename to lib/features/data_domain/tracks/download_tracks/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/download_tracks/download_tracks.dart b/lib/features/data_domain/tracks/download_tracks/download_tracks.dart new file mode 100644 index 0000000..f018dc9 --- /dev/null +++ b/lib/features/data_domain/tracks/download_tracks/download_tracks.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks/data/local_tracks/local_tracks.dart b/lib/features/data_domain/tracks/local_tracks/data/data.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/local_tracks.dart rename to lib/features/data_domain/tracks/local_tracks/data/data.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/data_sources/data_sources.dart b/lib/features/data_domain/tracks/local_tracks/data/data_sources/data_sources.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/data_sources/data_sources.dart rename to lib/features/data_domain/tracks/local_tracks/data/data_sources/data_sources.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart b/lib/features/data_domain/tracks/local_tracks/data/data_sources/local_tracks_data_source.dart similarity index 88% rename from lib/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart rename to lib/features/data_domain/tracks/local_tracks/data/data_sources/local_tracks_data_source.dart index 7cfa7ee..7b221d6 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/data_sources/local_tracks_data_source.dart @@ -1,8 +1,6 @@ import 'package:spotify_downloader/core/db/local_db.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/models/models.dart'; + import 'package:sqflite/sqflite.dart'; class LocalTracksDataSource { diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart b/lib/features/data_domain/tracks/local_tracks/data/models/local_track_dto.dart similarity index 69% rename from lib/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart rename to lib/features/data_domain/tracks/local_tracks/data/models/local_track_dto.dart index 0bd6daa..4f6b540 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/models/local_track_dto.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto.dart'; class LocalTrackDto { LocalTrackDto( diff --git a/lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto.dart b/lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto.dart new file mode 100644 index 0000000..fe43463 --- /dev/null +++ b/lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto.dart @@ -0,0 +1,9 @@ +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/models/models.dart'; + +class LocalTracksCollectionDto { + LocalTracksCollectionDto({required this.group, required this.spotifyId, required this.type}); + + final String spotifyId; + final LocalTracksCollectionDtoType type; + final LocalTracksCollectionsGroupDto group; +} diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart b/lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto_type.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart rename to lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collection_dto_type.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart b/lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collections_group_dto.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart rename to lib/features/data_domain/tracks/local_tracks/data/models/local_tracks_collections_group_dto.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/models/models.dart b/lib/features/data_domain/tracks/local_tracks/data/models/models.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/models/models.dart rename to lib/features/data_domain/tracks/local_tracks/data/models/models.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/converters.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/converters.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/converters/converters.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/converters/converters.dart diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_track_dto_to_local_track_converter.dart similarity index 61% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_track_dto_to_local_track_converter.dart index 2901c5a..058f056 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_track_dto_to_local_track_converter.dart @@ -1,7 +1,6 @@ -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_track_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; + class LocalTrackDtoToLocalTrackConverter implements ValueConverter { final LocalTracksCollectionDtoToLocalTracksCollectionConverter _collectionsConverter = diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart similarity index 62% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart index 6e49a5e..5f2a16b 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart @@ -1,9 +1,5 @@ -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; - -import 'local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; class LocalTracksCollectionDtoToLocalTracksCollectionConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart similarity index 79% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart index 4a45a39..04a4c7e 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collection_dto_type_to_local_tracks_collection_type_converter.dart @@ -1,6 +1,5 @@ -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collection_dto_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; class LocalTracksCollectionDtoTypeToLocalTracksCollectionTypeConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart similarity index 59% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart index ee36262..99670c3 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/repositories/converters/local_tracks_collections_group_dto_to_local_tracks_collections_group_converter.dart @@ -1,6 +1,5 @@ -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/models/local_tracks_collections_group_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; class LocalTracksCollectionsGroupDtoToLocalTracksCollectionsGroupConverter implements ValueConverter { @override diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/local_tracks_repository_impl.dart similarity index 63% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/local_tracks_repository_impl.dart index 45daedc..874259e 100644 --- a/lib/features/data_domain/tracks/data/local_tracks/repositories/local_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/local_tracks/data/repositories/local_tracks_repository_impl.dart @@ -1,11 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/data_sources/local_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_track_dto_to_local_track_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/local_tracks/repositories/converters/local_tracks_collection_dto_to_local_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; class LocalTracksRepositoryImpl implements LocalTracksRepository { LocalTracksRepositoryImpl({required LocalTracksDataSource dataSource}) : _dataSource = dataSource; diff --git a/lib/features/data_domain/tracks/data/local_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/local_tracks/data/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/data/local_tracks/repositories/repositories.dart rename to lib/features/data_domain/tracks/local_tracks/data/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/domain/local_tracks/local_tracks.dart b/lib/features/data_domain/tracks/local_tracks/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/local_tracks/local_tracks.dart rename to lib/features/data_domain/tracks/local_tracks/domain/domain.dart diff --git a/lib/features/data_domain/tracks/domain/local_tracks/entities/entities.dart b/lib/features/data_domain/tracks/local_tracks/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/local_tracks/entities/entities.dart rename to lib/features/data_domain/tracks/local_tracks/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart b/lib/features/data_domain/tracks/local_tracks/domain/entities/local_track.dart similarity index 68% rename from lib/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart rename to lib/features/data_domain/tracks/local_tracks/domain/entities/local_track.dart index 755bcbc..5884d09 100644 --- a/lib/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart +++ b/lib/features/data_domain/tracks/local_tracks/domain/entities/local_track.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection.dart'; class LocalTrack { LocalTrack({ diff --git a/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart b/lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection.dart similarity index 66% rename from lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart rename to lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection.dart index 3dc11ba..cf1b548 100644 --- a/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart +++ b/lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection.dart @@ -1,5 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/domain/entities/entities.dart'; class LocalTracksCollection { LocalTracksCollection({required this.group, required this.spotifyId, required this.type}); diff --git a/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart b/lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection_group.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart rename to lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection_group.dart diff --git a/lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart b/lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection_type.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart rename to lib/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection_type.dart diff --git a/lib/features/data_domain/tracks/local_tracks/domain/repositories/local_tracks_repository.dart b/lib/features/data_domain/tracks/local_tracks/domain/repositories/local_tracks_repository.dart new file mode 100644 index 0000000..43faa7e --- /dev/null +++ b/lib/features/data_domain/tracks/local_tracks/domain/repositories/local_tracks_repository.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/domain/entities/entities.dart'; + +abstract class LocalTracksRepository { + Future> getLocalTrack(LocalTracksCollection localTracksCollection, String spotifyId); + Future> saveLocalTrack(LocalTrack localTrack); + Future> removeLocalTrack(LocalTrack localTrack); +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/local_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/local_tracks/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/local_tracks/repositories/repositories.dart rename to lib/features/data_domain/tracks/local_tracks/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/local_tracks/local_tracks.dart b/lib/features/data_domain/tracks/local_tracks/local_tracks.dart new file mode 100644 index 0000000..f018dc9 --- /dev/null +++ b/lib/features/data_domain/tracks/local_tracks/local_tracks.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks/data/network_tracks/network_tracks.dart b/lib/features/data_domain/tracks/network_tracks/data/data.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/network_tracks.dart rename to lib/features/data_domain/tracks/network_tracks/data/data.dart diff --git a/lib/features/data_domain/tracks/data/network_tracks/data_sources/data_sources.dart b/lib/features/data_domain/tracks/network_tracks/data/data_sources/data_sources.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/data_sources/data_sources.dart rename to lib/features/data_domain/tracks/network_tracks/data/data_sources/data_sources.dart diff --git a/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart b/lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart similarity index 93% rename from lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart rename to lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart index 9bca82a..07ee554 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart @@ -1,11 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/isolate_pool/isolate_pool.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/util_methods.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/data/models/models.dart'; + class NetworkTracksDataSource { Future init() async { diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart b/lib/features/data_domain/tracks/network_tracks/data/models/get_tracks_args.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart rename to lib/features/data_domain/tracks/network_tracks/data/models/get_tracks_args.dart diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/models.dart b/lib/features/data_domain/tracks/network_tracks/data/models/models.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/models/models.dart rename to lib/features/data_domain/tracks/network_tracks/data/models/models.dart diff --git a/lib/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart b/lib/features/data_domain/tracks/network_tracks/data/models/tracks_dto_getting_ended_status.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart rename to lib/features/data_domain/tracks/network_tracks/data/models/tracks_dto_getting_ended_status.dart diff --git a/lib/features/data_domain/tracks/network_tracks/data/models/tracks_getting_stream.dart b/lib/features/data_domain/tracks/network_tracks/data/models/tracks_getting_stream.dart new file mode 100644 index 0000000..f13e0b3 --- /dev/null +++ b/lib/features/data_domain/tracks/network_tracks/data/models/tracks_getting_stream.dart @@ -0,0 +1,8 @@ +import 'package:spotify/spotify.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/data/models/tracks_dto_getting_ended_status.dart'; + +class TracksGettingStream { + Function(Result)? onEnded; + Function(List)? onPartGot; +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/converters.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/converters.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/repositories/converters/converters.dart rename to lib/features/data_domain/tracks/network_tracks/data/repositories/converters/converters.dart diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart similarity index 72% rename from lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart rename to lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart index a364385..2c486ac 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart @@ -1,8 +1,7 @@ import 'package:spotify/spotify.dart' as dto; -import 'package:spotify_downloader/core/utils/converters/converter_with_parameter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/album.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart' as entity; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart' as entity; class TrackDtoToTrackConverter implements ConverterWithParameter { @override diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart similarity index 67% rename from lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart rename to lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart index 52a7591..2e2f565 100644 --- a/lib/features/data_domain/tracks/data/network_tracks/repositories/network_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart @@ -1,17 +1,9 @@ -import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_source.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/data_sources/network_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/get_tracks_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_dto_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/models/tracks_getting_stream.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/network_tracks/repositories/converters/track_dto_to_track_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; import 'package:spotify/spotify.dart' as dto; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/network_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; + class NetworkTracksRepositoryImpl implements NetworkTracksRepository { NetworkTracksRepositoryImpl({ diff --git a/lib/features/data_domain/tracks/data/network_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/data/network_tracks/repositories/repositories.dart rename to lib/features/data_domain/tracks/network_tracks/data/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/domain/network_tracks/network_tracks.dart b/lib/features/data_domain/tracks/network_tracks/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/network_tracks/network_tracks.dart rename to lib/features/data_domain/tracks/network_tracks/domain/domain.dart diff --git a/lib/features/data_domain/tracks/domain/network_tracks/entities/entities.dart b/lib/features/data_domain/tracks/network_tracks/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/network_tracks/entities/entities.dart rename to lib/features/data_domain/tracks/network_tracks/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart b/lib/features/data_domain/tracks/network_tracks/domain/entities/get_tracks_from_tracks_collection_args.dart similarity index 78% rename from lib/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart rename to lib/features/data_domain/tracks/network_tracks/domain/entities/get_tracks_from_tracks_collection_args.dart index 96e86ac..04d0c76 100644 --- a/lib/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart +++ b/lib/features/data_domain/tracks/network_tracks/domain/entities/get_tracks_from_tracks_collection_args.dart @@ -1,5 +1,5 @@ import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; class GetTracksFromTracksCollectionArgs { GetTracksFromTracksCollectionArgs( diff --git a/lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart b/lib/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_ended_status.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart rename to lib/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_ended_status.dart diff --git a/lib/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_observer.dart b/lib/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_observer.dart new file mode 100644 index 0000000..e7fed93 --- /dev/null +++ b/lib/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_observer.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + +class TracksGettingObserver { + Function(Result)? onEnded; + Function(Iterable)? onPartGot; +} diff --git a/lib/features/data_domain/tracks/network_tracks/domain/repositories/network_tracks_repository.dart b/lib/features/data_domain/tracks/network_tracks/domain/repositories/network_tracks_repository.dart new file mode 100644 index 0000000..82ba10c --- /dev/null +++ b/lib/features/data_domain/tracks/network_tracks/domain/repositories/network_tracks_repository.dart @@ -0,0 +1,5 @@ +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/domain.dart'; + +abstract class NetworkTracksRepository { + Future getTracksFromTracksCollection(GetTracksFromTracksCollectionArgs args); +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/network_tracks/repositories/repositories.dart b/lib/features/data_domain/tracks/network_tracks/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/network_tracks/repositories/repositories.dart rename to lib/features/data_domain/tracks/network_tracks/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/network_tracks/network_tracks.dart b/lib/features/data_domain/tracks/network_tracks/network_tracks.dart new file mode 100644 index 0000000..f018dc9 --- /dev/null +++ b/lib/features/data_domain/tracks/network_tracks/network_tracks.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/observe_tracks_loading.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/observe_tracks_loading.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/entities.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/entities.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart similarity index 81% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart index 6be5b84..641e7f9 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; class LoadingTrackObserverWithId { LoadingTrackObserverWithId({required this.loadingTrackObserver, required this.spotifyId}); diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart similarity index 84% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart index 4e4ebea..46071c2 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart @@ -1,11 +1,9 @@ import 'dart:async'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'loading_tracks_collection_info.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/entities.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; + class LoadingTracksCollectionController { LoadingTracksCollectionController(this._sourceTracksCollection) { diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_info.dart similarity index 87% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_info.dart index f2b60f9..95c3fc3 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_info.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; class LoadingTracksCollectionInfo extends Equatable { const LoadingTracksCollectionInfo( diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart similarity index 80% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart index 0cd0de2..d947f20 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart @@ -1,7 +1,6 @@ import 'dart:async'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'loading_tracks_collection_info.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart'; class LoadingTracksCollectionObserver { LoadingTracksCollectionObserver( diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_status.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_status.dart diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection.dart new file mode 100644 index 0000000..099194b --- /dev/null +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/entities.dart'; + +class LoadingTracksCollection { + LoadingTracksCollection({required this.id, required this.controller}); + + final LoadingTracksCollectionId id; + final LoadingTracksCollectionController controller; +} diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection_id.dart similarity index 75% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection_id.dart index 7b6252e..97e44c0 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collection_id.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart'; class LoadingTracksCollectionId extends Equatable { const LoadingTracksCollectionId({required this.spotifyId, required this.tracksCollectionType}); diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collections_observer.dart similarity index 82% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collections_observer.dart index 8aa3d10..b4924cf 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collections_observer.dart @@ -1,4 +1,4 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; class LoadingTracksCollectionsObserver { LoadingTracksCollectionsObserver( diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/repository.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/repository.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/repository.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/repository.dart diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository.dart similarity index 51% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository.dart index 2b3ad90..2a0435b 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository.dart @@ -1,7 +1,6 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -import '../entities/repository/loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; abstract class ObserveTracksLoadingRepository { void observeLoadingTrack(LoadingTrackObserver loadingTrack, Track track); diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart similarity index 62% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart index 728fb95..4f3602c 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository_impl.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart @@ -1,14 +1,10 @@ import 'dart:async'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_track_observer_with_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_controller.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collection_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; - -import '../entities/repository/loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + + class ObserveTracksLoadingRepositoryImpl implements ObserveTracksLoadingRepository { ObserveTracksLoadingRepositoryImpl() { diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/repository.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/repository.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/repository/repository.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/repository.dart diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart similarity index 50% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart index 83fe410..b07c8af 100644 --- a/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart @@ -1,8 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; class GetLoadingTracksCollectionsObserver implements UseCase { final ObserveTracksLoadingRepository _observeTracksLoading; diff --git a/lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/use_cases.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/use_cases.dart rename to lib/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/use_cases.dart diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/search_videos_by_track.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/data.dart similarity index 100% rename from lib/features/data_domain/tracks/data/search_videos_by_track/search_videos_by_track.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/data.dart diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/data_sources.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/data_sources/data_sources.dart similarity index 100% rename from lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/data_sources.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/data_sources/data_sources.dart diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/data_sources/search_video_on_youtube_data_source.dart similarity index 88% rename from lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/data_sources/search_video_on_youtube_data_source.dart index eee6944..ab489ca 100644 --- a/lib/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/search_videos_by_track/data/data_sources/search_video_on_youtube_data_source.dart @@ -2,10 +2,7 @@ import 'dart:io'; import 'dart:math'; import 'package:http/http.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/isolate_pool/isolate_pool.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; class SearchVideoOnYoutubeDataSource { diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/converters.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/repositories/converters/converters.dart similarity index 100% rename from lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/converters.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/repositories/converters/converters.dart diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/repositories/converters/video_dto_to_video_converter.dart similarity index 67% rename from lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/repositories/converters/video_dto_to_video_converter.dart index 80ad19c..98af119 100644 --- a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart +++ b/lib/features/data_domain/tracks/search_videos_by_track/data/repositories/converters/video_dto_to_video_converter.dart @@ -1,7 +1,5 @@ -// ignore_for_file: invalid_use_of_internal_member - -import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart' as entity; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/entities/video.dart' as entity; import 'package:youtube_explode_dart/youtube_explode_dart.dart' as model; class VideoDtoToVideoConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/repositories.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/data/search_videos_by_track/repositories/repositories.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart b/lib/features/data_domain/tracks/search_videos_by_track/data/repositories/search_videos_by_track_repository_impl.dart similarity index 81% rename from lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart rename to lib/features/data_domain/tracks/search_videos_by_track/data/repositories/search_videos_by_track_repository_impl.dart index cf749e6..b203d39 100644 --- a/lib/features/data_domain/tracks/data/search_videos_by_track/repositories/search_videos_by_track_repository_impl.dart +++ b/lib/features/data_domain/tracks/search_videos_by_track/data/repositories/search_videos_by_track_repository_impl.dart @@ -1,10 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/data_sources/search_video_on_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/data/search_videos_by_track/repositories/converters/video_dto_to_video_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; class SearchVideosByTrackRepositoryImpl implements SearchVideosByTrackRepository { SearchVideosByTrackRepositoryImpl({required SearchVideoOnYoutubeDataSource searchVideoOnYoutubeDataSource}) diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/search_videos_by_track.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/search_videos_by_track/search_videos_by_track.dart rename to lib/features/data_domain/tracks/search_videos_by_track/domain/domain.dart diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/entities/entities.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/search_videos_by_track/entities/entities.dart rename to lib/features/data_domain/tracks/search_videos_by_track/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/entities/video.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart rename to lib/features/data_domain/tracks/search_videos_by_track/domain/entities/video.dart diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/repositories.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/search_videos_by_track/repositories/repositories.dart rename to lib/features/data_domain/tracks/search_videos_by_track/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks/search_videos_by_track/domain/repositories/search_videos_by_track_repository.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/repositories/search_videos_by_track_repository.dart new file mode 100644 index 0000000..6020b58 --- /dev/null +++ b/lib/features/data_domain/tracks/search_videos_by_track/domain/repositories/search_videos_by_track_repository.dart @@ -0,0 +1,9 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; + +abstract class SearchVideosByTrackRepository { + Future> findVideoByTrack(Track track); + Future>> findVideosByTrack(Track track, int count); + Future> getVideoByUrl(String url); +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart new file mode 100644 index 0000000..494b5e1 --- /dev/null +++ b/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart @@ -0,0 +1,15 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; + +class Find10VideosByTrack implements UseCase, Track> { + Find10VideosByTrack({required SearchVideosByTrackRepository searchVideosByTrackRepository}) + : _searchVideosByTrackRepository = searchVideosByTrackRepository; + + final SearchVideosByTrackRepository _searchVideosByTrackRepository; + + @override + Future>> call(Track track) { + return _searchVideosByTrackRepository.findVideosByTrack(track, 10); + } +} diff --git a/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart new file mode 100644 index 0000000..daca811 --- /dev/null +++ b/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart @@ -0,0 +1,14 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart'; + +class GetVideoByUrl implements UseCase { + GetVideoByUrl({required SearchVideosByTrackRepository searchVideosByTrackRepository}) + : _searchVideosByTrackRepository = searchVideosByTrackRepository; + + final SearchVideosByTrackRepository _searchVideosByTrackRepository; + + @override + Future> call(String url) { + return _searchVideosByTrackRepository.getVideoByUrl(url); + } +} diff --git a/lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/use_cases.dart b/lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/search_videos_by_track/use_cases/use_cases.dart rename to lib/features/data_domain/tracks/search_videos_by_track/domain/use_cases/use_cases.dart diff --git a/lib/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart b/lib/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart new file mode 100644 index 0000000..f018dc9 --- /dev/null +++ b/lib/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/services/entities/entities.dart b/lib/features/data_domain/tracks/services/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/services/entities/entities.dart rename to lib/features/data_domain/tracks/services/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart b/lib/features/data_domain/tracks/services/entities/track_with_loading_observer.dart similarity index 84% rename from lib/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart rename to lib/features/data_domain/tracks/services/entities/track_with_loading_observer.dart index 3c83ca5..eb957fa 100644 --- a/lib/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart +++ b/lib/features/data_domain/tracks/services/entities/track_with_loading_observer.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; class TrackWithLoadingObserver { TrackWithLoadingObserver({required this.track, LoadingTrackObserver? loadingObserver}) diff --git a/lib/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart b/lib/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart new file mode 100644 index 0000000..61c93d0 --- /dev/null +++ b/lib/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart @@ -0,0 +1,14 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; + +class TracksWithLoadingObserverGettingObserver { + TracksWithLoadingObserverGettingObserver({ + required this.onEnded, + required this.onPartGot, + }); + + + Stream> onEnded; + Stream> onPartGot; +} diff --git a/lib/features/data_domain/tracks/domain/services/services.dart b/lib/features/data_domain/tracks/services/services.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/services/services.dart rename to lib/features/data_domain/tracks/services/services.dart diff --git a/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart new file mode 100644 index 0000000..fe26cc8 --- /dev/null +++ b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart @@ -0,0 +1,15 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; + +abstract class DownloadTracksService { + Future> downloadTrack(Track track); + + Future> downloadTracksRange(List tracksWithLoadingObservers); + + Future> downloadTracksFromGettingObserver( + TracksWithLoadingObserverGettingObserver tracksWithLoadingObserverGettingObserver); + + Future> cancelTrackLoading(Track track); +} diff --git a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart similarity index 70% rename from lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart rename to lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart index f711d7c..1386cf5 100644 --- a/lib/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart @@ -1,25 +1,14 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_loading_notifier.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/track_with_lazy_youtube_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/tools/save_path_generator.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; class DownloadTracksServiceImpl implements DownloadTracksService { DownloadTracksServiceImpl( diff --git a/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service.dart b/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service.dart new file mode 100644 index 0000000..07bc1f2 --- /dev/null +++ b/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; + +abstract class GetTracksService { + Future> getTracksWithLoadingObserversFromTracksColleciton( + {required TracksCollection tracksCollection, required int offset}); +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart b/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart similarity index 72% rename from lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart rename to lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart index a7c0445..53d7ae1 100644 --- a/lib/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart @@ -1,28 +1,18 @@ import 'dart:async'; import 'dart:io'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart'; -import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/save_mode.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/local_auth.dart'; +import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/repository/download_tracks_settings_repository.dart'; - import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_group.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/get_tracks_from_tracks_collection_args.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/repositories/network_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/network_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/tools/save_path_generator.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; class GetTracksServiceImpl implements GetTracksService { GetTracksServiceImpl( diff --git a/lib/features/data_domain/tracks/domain/services/services/services.dart b/lib/features/data_domain/tracks/services/services/services.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/services/services/services.dart rename to lib/features/data_domain/tracks/services/services/services.dart diff --git a/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart b/lib/features/data_domain/tracks/services/services/tools/save_path_generator.dart similarity index 85% rename from lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart rename to lib/features/data_domain/tracks/services/services/tools/save_path_generator.dart index 949774d..cc18013 100644 --- a/lib/features/data_domain/tracks/domain/services/services/tools/save_path_generator.dart +++ b/lib/features/data_domain/tracks/services/services/tools/save_path_generator.dart @@ -1,7 +1,6 @@ import 'package:spotify_downloader/core/utils/util_methods.dart'; import 'package:spotify_downloader/features/data_domain/settings/domain/enitities/enitities.dart'; - -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; import 'package:path/path.dart' as p; class SavePathGenerator { diff --git a/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart b/lib/features/data_domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart similarity index 78% rename from lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart rename to lib/features/data_domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart index 5c6b8e9..57a165e 100644 --- a/lib/features/data_domain/tracks/domain/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart +++ b/lib/features/data_domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/local_tracks/entities/local_tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/domain/entities/local_tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart'; class TracksCollectionTypeToLocalTracksCollectionTypeConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart b/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart new file mode 100644 index 0000000..eb98904 --- /dev/null +++ b/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart @@ -0,0 +1,15 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + +class CancelTrackLoading implements UseCase { + CancelTrackLoading({required DownloadTracksService dowloadTracksService}) + : _dowloadTracksService = dowloadTracksService; + + final DownloadTracksService _dowloadTracksService; + + @override + Future> call(Track track) async { + return _dowloadTracksService.cancelTrackLoading(track); + } +} diff --git a/lib/features/data_domain/tracks/services/use_cases/download_track.dart b/lib/features/data_domain/tracks/services/use_cases/download_track.dart new file mode 100644 index 0000000..821c6fe --- /dev/null +++ b/lib/features/data_domain/tracks/services/use_cases/download_track.dart @@ -0,0 +1,15 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; + +class DownloadTrack implements UseCase { + DownloadTrack({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; + + final DownloadTracksService _downloadTracksService; + + @override + Future> call(Track track) async { + return _downloadTracksService.downloadTrack(track); + } +} diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart b/lib/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart similarity index 51% rename from lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart rename to lib/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart index cbe8ef4..0886bfe 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart +++ b/lib/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart @@ -1,8 +1,5 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/download_tracks_service/download_tracks_service.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; class DownloadTracksFromGettingObserver implements UseCase { DownloadTracksFromGettingObserver({required DownloadTracksService downloadTracksService}) diff --git a/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart b/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart new file mode 100644 index 0000000..ac04876 --- /dev/null +++ b/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart @@ -0,0 +1,13 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; + +class DownloadTracksRange implements UseCase> { + DownloadTracksRange({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; + + final DownloadTracksService _downloadTracksService; + + @override + Future> call(List tracks) async { + return _downloadTracksService.downloadTracksRange(tracks); + } +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart b/lib/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart similarity index 50% rename from lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart rename to lib/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart index 4b2dc1c..9603477 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart +++ b/lib/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart @@ -1,9 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; class GetTracksWithLoadingObserverFromTracksCollection implements UseCase { diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart b/lib/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart similarity index 52% rename from lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart rename to lib/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart index 40b0152..237b1dc 100644 --- a/lib/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart +++ b/lib/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart @@ -1,9 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; class GetTracksWithLoadingObserverFromTracksCollectionWithOffset implements diff --git a/lib/features/data_domain/tracks/domain/services/use_cases/use_cases.dart b/lib/features/data_domain/tracks/services/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/services/use_cases/use_cases.dart rename to lib/features/data_domain/tracks/services/use_cases/use_cases.dart diff --git a/lib/features/data_domain/tracks/domain/shared/shared.dart b/lib/features/data_domain/tracks/shared/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/shared/shared.dart rename to lib/features/data_domain/tracks/shared/domain/domain.dart diff --git a/lib/features/data_domain/tracks/domain/shared/entities/album.dart b/lib/features/data_domain/tracks/shared/domain/entities/album.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/shared/entities/album.dart rename to lib/features/data_domain/tracks/shared/domain/entities/album.dart diff --git a/lib/features/data_domain/tracks/domain/shared/entities/entities.dart b/lib/features/data_domain/tracks/shared/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/shared/entities/entities.dart rename to lib/features/data_domain/tracks/shared/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks/domain/shared/entities/track.dart b/lib/features/data_domain/tracks/shared/domain/entities/track.dart similarity index 68% rename from lib/features/data_domain/tracks/domain/shared/entities/track.dart rename to lib/features/data_domain/tracks/shared/domain/entities/track.dart index 04649d1..32bce82 100644 --- a/lib/features/data_domain/tracks/domain/shared/entities/track.dart +++ b/lib/features/data_domain/tracks/shared/domain/entities/track.dart @@ -1,5 +1,5 @@ -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/album.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/album.dart'; class Track { Track( diff --git a/lib/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart b/lib/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart rename to lib/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart diff --git a/lib/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart b/lib/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart similarity index 100% rename from lib/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart rename to lib/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart diff --git a/lib/features/data_domain/tracks/tracks.dart b/lib/features/data_domain/tracks/tracks.dart deleted file mode 100644 index c2ecb87..0000000 --- a/lib/features/data_domain/tracks/tracks.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'data/data.dart'; -export 'domain/domain.dart'; diff --git a/lib/features/data_domain/tracks_collections/data/data.dart b/lib/features/data_domain/tracks_collections/data/data.dart deleted file mode 100644 index 72625f5..0000000 --- a/lib/features/data_domain/tracks_collections/data/data.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'history_tracks_collectons/history_tracks_collectons.dart'; -export 'network_tracks_collections/network_tracks_collections.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/domain.dart b/lib/features/data_domain/tracks_collections/domain/domain.dart deleted file mode 100644 index 72625f5..0000000 --- a/lib/features/data_domain/tracks_collections/domain/domain.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'history_tracks_collectons/history_tracks_collectons.dart'; -export 'network_tracks_collections/network_tracks_collections.dart'; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart b/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart deleted file mode 100644 index 37800c5..0000000 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; - -abstract class NetworkTracksCollectionsService { - Future> getTracksCollectionByTypeAndSpotifyId( - TracksCollectionType type, String spotifyId); - Future> getTracksCollectionByUrl(String url); -} diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/history_tracks_collectons.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/data.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/history_tracks_collectons.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/data.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/data_source.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/data_source.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/data_source.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/data_source.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/tracks_collectons_history_data_source.dart similarity index 96% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/tracks_collectons_history_data_source.dart index 12eea40..8a8c4a1 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/tracks_collectons_history_data_source.dart @@ -1,5 +1,5 @@ import 'package:spotify_downloader/core/db/local_db.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/data/models/models.dart'; import 'package:sqflite/sqflite.dart'; class TracksCollectonsHistoryDataSource { diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/models/history_tracks_collection_dto.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/models/history_tracks_collection_dto.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/models.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/models/models.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/models/models.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/models/models.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/converters.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/converters.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/converters.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/converters.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/history_tracks_collections_converter.dart similarity index 75% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/history_tracks_collections_converter.dart index 2abdb8c..43d72ee 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/history_tracks_collections_converter.dart @@ -1,7 +1,5 @@ import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; class HistoryTracksCollectionsConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart similarity index 71% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart index bcfc67c..eaaee02 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart @@ -1,7 +1,6 @@ import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; class TracksCollectionToHistoryTracksCollectionDtoConverter implements ValueConverter { diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/tracks_collection_types_converter.dart similarity index 88% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/tracks_collection_types_converter.dart index 1bbfc59..1470b63 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_types_converter.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/converters/tracks_collection_types_converter.dart @@ -1,6 +1,6 @@ import 'package:spotify_downloader/core/utils/converters/simple_converters/value_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/models/history_tracks_collection_dto.dart'; -import '../../../../../tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; class TracksCollectionTypesConverter implements ValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/repositories.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/tracks_collections_history_repository_impl.dart similarity index 69% rename from lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/tracks_collections_history_repository_impl.dart index 9af02a2..5999125 100644 --- a/lib/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/tracks_collections_history_repository_impl.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/tracks_collections_history_repository_impl.dart @@ -1,11 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/data_source/tracks_collectons_history_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/history_tracks_collections_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/history_tracks_collectons/repositories/converters/tracks_collection_to_history_tracks_collection_dto_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; class TracksCollectionsHistoryRepositoryImpl implements TracksCollectionsHistoryRepository { TracksCollectionsHistoryRepositoryImpl({required TracksCollectonsHistoryDataSource dataSource}) diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/history_tracks_collectons.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/history_tracks_collectons.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/domain.dart diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/entities.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/entities.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/entities.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/entities.dart diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart similarity index 84% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart index d0b1c2f..e37edad 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart'; class HistoryTracksCollection extends Equatable { const HistoryTracksCollection({ diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/repositories.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/tracks_collections_history_repository.dart similarity index 55% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/tracks_collections_history_repository.dart index 4670b6f..542f8c6 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/tracks_collections_history_repository.dart @@ -1,7 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/domain.dart'; abstract class TracksCollectionsHistoryRepository { diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart similarity index 58% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart index 17c5d0d..65eac2b 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart @@ -1,8 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/domain.dart'; class AddTracksCollectionToHistory implements UseCase { AddTracksCollectionToHistory({required TracksCollectionsHistoryRepository historyPlaylistsRepository}) diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart similarity index 52% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart index 6a19866..66468ed 100644 --- a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart @@ -1,19 +1,14 @@ -// ignore_for_file: prefer_void_to_null +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/repositories/tracks_collections_history_repository.dart'; - -class GetOrderedHistory implements UseCase?, Null> { +class GetOrderedHistory implements UseCase?, void> { GetOrderedHistory({required TracksCollectionsHistoryRepository historyPlaylistsRepository}) : _historyPlaylistsRepository = historyPlaylistsRepository; final TracksCollectionsHistoryRepository _historyPlaylistsRepository; @override - Future?>> call(Null params) async { + Future?>> call(void params) async { final historyPlaylistsResult = await _historyPlaylistsRepository.getTracksCollectionsHistory(); if (historyPlaylistsResult.isSuccessful) { historyPlaylistsResult.result?.sort((e1, e2) => e2.openDate?.compareTo(e1.openDate ?? DateTime.now()) ?? 1); diff --git a/lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/use_cases.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/use_cases.dart rename to lib/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/use_cases.dart diff --git a/lib/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart b/lib/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart new file mode 100644 index 0000000..f018dc9 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/network_tracks_collections.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/data.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/network_tracks_collections.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/data.dart diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/data_source.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/data_source.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/data_source.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/data_source.dart diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/network_tracks_collections_data_source.dart similarity index 88% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/network_tracks_collections_data_source.dart index 6157fd5..1b56e84 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/network_tracks_collections_data_source.dart @@ -1,7 +1,5 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/util_methods.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class NetworkTracksCollectionsDataSource { diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/album_dto_to_tracks_collection_converter.dart similarity index 63% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/album_dto_to_tracks_collection_converter.dart index 0d14cf3..d3f8da7 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/album_dto_to_tracks_collection_converter.dart @@ -1,9 +1,8 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/converters/result_converters/result_value_converter.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart'; + class AlbumDtoToTracksCollectionConverter implements ResultValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/converters.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/converters.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/converters.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/converters.dart diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/playlist_dto_to_tracks_collection_converter.dart similarity index 64% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/playlist_dto_to_tracks_collection_converter.dart index bbf2f88..e8635cb 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/playlist_dto_to_tracks_collection_converter.dart @@ -1,9 +1,7 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/converters/result_converters/result_value_converter.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + class PlaylistDtoToTracksCollectionConverter implements ResultValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/track_dto_to_tracks_collection_converter.dart similarity index 63% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/track_dto_to_tracks_collection_converter.dart index b6141a8..a084d7a 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/converters/track_dto_to_tracks_collection_converter.dart @@ -1,9 +1,8 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/converters/result_converters/result_value_converter.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection_type.dart'; + class TrackDtoToTracksCollectionConverter implements ResultValueConverter { @override diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/repositories.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/tracks_collections_repository_impl.dart similarity index 74% rename from lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/tracks_collections_repository_impl.dart index fae0227..766ade5 100644 --- a/lib/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/tracks_collections_repository_impl.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/tracks_collections_repository_impl.dart @@ -1,16 +1,8 @@ -import 'dart:async'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/converters/spotify_requests_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/data_source/network_tracks_collections_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/album_dto_to_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/playlist_dto_to_tracks_collection_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/data/network_tracks_collections/repositories/converters/track_dto_to_tracks_collection_converter.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart'; class NetworkTracksCollectionsRepositoryImpl implements NetworkTracksCollectionsRepository { NetworkTracksCollectionsRepositoryImpl({required NetworkTracksCollectionsDataSource dataSource}) diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/network_tracks_collections.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/domain.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/network_tracks_collections.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/domain.dart diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/network_tracks_collections_repository.dart similarity index 56% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/network_tracks_collections_repository.dart index e3b1442..3788d20 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/network_tracks_collections_repository.dart @@ -1,8 +1,8 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; + + +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; abstract class NetworkTracksCollectionsRepository { Future> getTracksCollectionByTypeAndSpotifyId( diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/repositories.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/repositories.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/repositories.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/repositories.dart diff --git a/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service.dart new file mode 100644 index 0000000..2f8b03d --- /dev/null +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service.dart @@ -0,0 +1,8 @@ +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + +abstract class NetworkTracksCollectionsService { + Future> getTracksCollectionByTypeAndSpotifyId( + TracksCollectionType type, String spotifyId); + Future> getTracksCollectionByUrl(String url); +} diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service_impl.dart similarity index 74% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service_impl.dart index ff5a96e..7f5484b 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service_impl.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service_impl.dart @@ -1,11 +1,8 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/repositories/local_full_auth_repository.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/domain.dart'; import 'package:spotify_downloader/features/data_domain/shared/domain/spotify_repository_request.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/repositories/network_tracks_collections_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart'; class NetworkTracksCollectionsServiceImpl implements NetworkTracksCollectionsService { NetworkTracksCollectionsServiceImpl( diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/service.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/service.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/service/service.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/service/service.dart diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart similarity index 50% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart index 1fe4fe0..f1dc031 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart @@ -1,9 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection_type.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/service/service.dart'; class GetTracksCollectionByTypeAndSpotifyId implements UseCase { diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart similarity index 51% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart index 88b5fb9..e1008cf 100644 --- a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart @@ -1,8 +1,7 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/core/utils/use_case/use_case.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/service/network_tracks_collections_service.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/service/service.dart'; + class GetTracksCollectionByUrl implements UseCase { GetTracksCollectionByUrl({required NetworkTracksCollectionsService service}) : _service = service; diff --git a/lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/use_cases.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/use_cases.dart similarity index 100% rename from lib/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/use_cases.dart rename to lib/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/use_cases.dart diff --git a/lib/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart b/lib/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart new file mode 100644 index 0000000..f018dc9 --- /dev/null +++ b/lib/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'domain/domain.dart'; \ No newline at end of file diff --git a/lib/features/data_domain/tracks_collections/tracks_collections.dart b/lib/features/data_domain/tracks_collections/tracks_collections.dart deleted file mode 100644 index c2ecb87..0000000 --- a/lib/features/data_domain/tracks_collections/tracks_collections.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'data/data.dart'; -export 'domain/domain.dart'; diff --git a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart index bdf4ec6..6fad2da 100644 --- a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart +++ b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart @@ -2,10 +2,10 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/entities/video.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/find_10_videos_by_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/search_videos_by_track/use_cases/get_video_by_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/entities/video.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; part 'change_source_video_event.dart'; part 'change_source_video_state.dart'; diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 741af1a..04c2792 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -5,7 +5,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; import 'package:spotify_downloader/generated/l10n.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart index ab4e993..d7184f2 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; part 'filter_tracks_event.dart'; part 'filter_tracks_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart index 6084428..ada79cc 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart @@ -6,15 +6,15 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/network_tracks/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_from_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_tracks_range.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_ended_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_range.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; part 'get_and_download_tracks_event.dart'; part 'get_and_download_tracks_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart index 845924f..4831976 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart @@ -3,8 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/add_tracks_collection_to_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart'; part 'get_tracks_collection_event.dart'; part 'get_tracks_collection_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart index 09e499d..b28b1df 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart @@ -1,8 +1,8 @@ import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; class GetTracksCollectionByHistoryBloc extends GetTracksCollectionBloc { diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart index 6664d22..41291b5 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart @@ -1,7 +1,7 @@ import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/network_tracks_collections/use_cases/get_tracks_collection_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; class GetTracksCollectionByUrlBloc extends GetTracksCollectionBloc { diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index cd27b81..5e549e1 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -9,7 +9,7 @@ import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/core/utils/util_methods.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart index 05edaed..e7b8f2f 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart @@ -1,8 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; part 'download_track_info_event.dart'; part 'download_track_info_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart index 4161d8d..be75ffa 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart @@ -8,7 +8,7 @@ import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart index 60aa16c..93ed558 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; part 'download_track_info_status_tile_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart index d5b8901..c57cde4 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart @@ -6,7 +6,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; import 'package:spotify_downloader/generated/l10n.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart index d3af6a6..b79a692 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart @@ -3,12 +3,12 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/download_tracks/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/use_cases/download_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/shared/entities/track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; part 'track_tile_event.dart'; part 'track_tile_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart index 0c36cc0..5ad140e 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; diff --git a/lib/features/presentation/history/bloc/history_bloc.dart b/lib/features/presentation/history/bloc/history_bloc.dart index 9f5996a..068ea84 100644 --- a/lib/features/presentation/history/bloc/history_bloc.dart +++ b/lib/features/presentation/history/bloc/history_bloc.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/use_cases/get_ordered_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart'; part 'history_event.dart'; part 'history_state.dart'; diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index 21804bd..bb4c680 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/liked_tracks_tile.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart'; import 'package:spotify_downloader/features/presentation/shared/widgets/search_text_field.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart index d80d7e8..7c869b1 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart'; part 'loading_tracks_collections_list_event.dart'; part 'loading_tracks_collections_list_state.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart index 594db9a..47441ba 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart @@ -3,7 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart'; import 'package:spotify_downloader/generated/l10n.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart index 133c6f5..a015e38 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_info.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_info.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; part 'loading_tracks_collection_tile_state.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart index 9d082fe..39f6eac 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart @@ -5,8 +5,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/domain/history_tracks_collectons/entities/history_tracks_collection.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; diff --git a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart index 4bb39d6..d92e3a3 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/entities/repository/loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/domain/observe_tracks_loading/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart'; import 'package:spotify_downloader/features/presentation/tracks_collections_loading_notifications/bloc_entities/tracks_collections_loading_info.dart'; part 'tracks_collections_loading_notifications_event.dart'; From bfae2d2efda2205ddba40e2dc652880ee0bdbcba Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 2 Jun 2024 12:35:19 +1000 Subject: [PATCH 05/41] Some presentation refactoring --- .../bloc/change_source_video_bloc.dart | 9 +++------ .../blocs/blocs.dart | 5 +++++ .../get_and_download_tracks_bloc.dart | 18 ++++++------------ .../base/get_tracks_collection_bloc.dart | 4 +--- .../get_tracks_collection_by_history_bloc.dart | 9 ++++----- .../get_tracks_collection_by_url_bloc.dart | 7 +++---- .../download_tracks_collection_screen.dart | 18 ++++-------------- .../bloc/download_track_info_bloc.dart | 4 ++-- .../widgets/widgets.dart | 6 ++++++ .../history/bloc/history_bloc.dart | 3 +-- .../loading_tracks_collections_list_bloc.dart | 7 +++---- .../loading_tracks_collection_tile_cubit.dart | 3 +-- .../settings/view/settings_screen.dart | 5 +---- .../presentation/settings/widgets/widgets.dart | 5 +++++ ...collections_loading_notifications_bloc.dart | 5 +---- 15 files changed, 46 insertions(+), 62 deletions(-) create mode 100644 lib/features/presentation/download_tracks_collection/blocs/blocs.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/widgets.dart create mode 100644 lib/features/presentation/settings/widgets/widgets.dart diff --git a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart index 6fad2da..1be16e5 100644 --- a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart +++ b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart @@ -1,11 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/entities/video.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; part 'change_source_video_event.dart'; part 'change_source_video_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/blocs.dart b/lib/features/presentation/download_tracks_collection/blocs/blocs.dart new file mode 100644 index 0000000..2d0e0b0 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/blocs/blocs.dart @@ -0,0 +1,5 @@ +export 'filter_tracks/filter_tracks_bloc.dart'; +export 'get_and_download_tracks/get_and_download_tracks_bloc.dart'; +export 'get_tracks_collection/get_tracks_collection_by_history_bloc.dart'; +export 'get_tracks_collection/get_tracks_collection_by_url_bloc.dart'; +export 'get_tracks_collection/base/get_tracks_collection_bloc.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart index ada79cc..6a055f7 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart @@ -3,18 +3,12 @@ import 'dart:async'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/entities/tracks_getting_ended_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/entities/tracks_with_loading_observer_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_range.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; + part 'get_and_download_tracks_event.dart'; part 'get_and_download_tracks_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart index 4831976..d6d81d6 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart @@ -1,8 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart'; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart index b28b1df..e7d2b6d 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart @@ -1,8 +1,7 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/domain.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; class GetTracksCollectionByHistoryBloc extends GetTracksCollectionBloc { diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart index 41291b5..6f0e061 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart @@ -1,7 +1,6 @@ -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/result/result.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/domain.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; class GetTracksCollectionByUrlBloc extends GetTracksCollectionBloc { diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 5e549e1..d2eb086 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -6,24 +6,14 @@ import 'package:palette_generator/palette_generator.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/core/utils/failures/failures.dart'; -import 'package:spotify_downloader/core/utils/util_methods.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile_placeholder.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; + import 'package:spotify_downloader/generated/l10n.dart'; import 'dart:math' as math; -import '../widgets/tracks_collection_manage_bar.dart'; - abstract class DownloadTracksCollectionScreen extends StatefulWidget { final String? url; final HistoryTracksCollection? historyTracksCollection; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart index e7b8f2f..4363ddd 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart @@ -1,8 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; + part 'download_track_info_event.dart'; part 'download_track_info_state.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart new file mode 100644 index 0000000..8d2305c --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart @@ -0,0 +1,6 @@ +export 'gradient_app_bar_with_opacity.dart'; +export 'network_failure_splash.dart'; +export 'track_tile_placeholder.dart'; +export 'tracks_collection_manage_bar.dart'; +export 'download_track_info/view/download_track_info.dart'; +export 'track_tile/view/track_tile.dart'; diff --git a/lib/features/presentation/history/bloc/history_bloc.dart b/lib/features/presentation/history/bloc/history_bloc.dart index 068ea84..266544d 100644 --- a/lib/features/presentation/history/bloc/history_bloc.dart +++ b/lib/features/presentation/history/bloc/history_bloc.dart @@ -1,7 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; part 'history_event.dart'; part 'history_state.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart index 7c869b1..ddaa78c 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart @@ -2,10 +2,9 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; + part 'loading_tracks_collections_list_event.dart'; part 'loading_tracks_collections_list_state.dart'; diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart index a015e38..1ea2bcc 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart @@ -2,8 +2,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_info.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart'; part 'loading_tracks_collection_tile_state.dart'; diff --git a/lib/features/presentation/settings/view/settings_screen.dart b/lib/features/presentation/settings/view/settings_screen.dart index d25d2b9..984116d 100644 --- a/lib/features/presentation/settings/view/settings_screen.dart +++ b/lib/features/presentation/settings/view/settings_screen.dart @@ -4,10 +4,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; -import 'package:spotify_downloader/features/presentation/settings/widgets/auth_settings/view/auth_settings.dart'; -import 'package:spotify_downloader/features/presentation/settings/widgets/download_tracks_settings/view/download_tracks_settings_editor.dart'; -import 'package:spotify_downloader/features/presentation/settings/widgets/language_setting/view/language_setting.dart'; -import 'package:spotify_downloader/features/presentation/settings/widgets/settings_group.dart'; +import 'package:spotify_downloader/features/presentation/settings/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @RoutePage() diff --git a/lib/features/presentation/settings/widgets/widgets.dart b/lib/features/presentation/settings/widgets/widgets.dart new file mode 100644 index 0000000..2c0aedb --- /dev/null +++ b/lib/features/presentation/settings/widgets/widgets.dart @@ -0,0 +1,5 @@ +export 'setting_with_text_field.dart'; +export 'settings_group.dart'; +export 'auth_settings/view/auth_settings.dart'; +export 'download_tracks_settings/view/download_tracks_settings_editor.dart'; +export 'language_setting/view/language_setting.dart'; diff --git a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart index d92e3a3..586bf6b 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart @@ -3,10 +3,7 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/repository/loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; import 'package:spotify_downloader/features/presentation/tracks_collections_loading_notifications/bloc_entities/tracks_collections_loading_info.dart'; part 'tracks_collections_loading_notifications_event.dart'; From 1ec7e9258d70e08c35558c4411043bf747edbff8 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 2 Jun 2024 12:41:30 +1000 Subject: [PATCH 06/41] Another refactoring --- lib/core/di/injector.dart | 71 +++++-------------- .../tracks/services/services/services.dart | 4 +- 2 files changed, 20 insertions(+), 55 deletions(-) diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index bfcc9f7..47a519d 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -3,67 +3,31 @@ import 'package:spotify_downloader/core/db/local_db.dart'; import 'package:spotify_downloader/core/db/local_db_impl.dart'; import 'package:spotify_downloader/core/permissions/permissions_manager.dart'; import 'package:spotify_downloader/core/permissions/requiring_permission_services_initializer.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/data/data_source/spotify_profile_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/data/repository/spotify_profile_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/data_sources/local_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/data/repositories/local_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/data/data_source/tracks_collectons_history_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/data/repositories/tracks_collections_history_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart'; +import 'package:spotify_downloader/features/data_domain/auth/local_auth/local_auth.dart'; +import 'package:spotify_downloader/features/data_domain/auth/network_auth/network_auth.dart'; +import 'package:spotify_downloader/features/data_domain/auth/service/service.dart'; +import 'package:spotify_downloader/features/data_domain/settings/settings.dart'; +import 'package:spotify_downloader/features/data_domain/spotify_profile/spotify_profile.dart'; import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/audio_metadata_editor/audio_metadata_editor_impl.dart'; import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/file_to_mp3_converter/ffmpeg_file_to_mp3_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/repositories/dowload_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/data/data_sources/search_video_on_youtube_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/data/repositories/search_videos_by_track_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/data/data_source/network_tracks_collections_data_source.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/data/repositories/tracks_collections_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/auth/auth.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/repository/spotify_profile_repostitory.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/service/spotify_profile_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/spotify_profile/domain/use_cases/get_spotify_profile.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/domain/repositories/local_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/use_cases/get_loading_tracks_collections_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/find_10_videos_by_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/use_cases/get_video_by_url.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_from_getting_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_tracks_range.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/local_tracks/local_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/network_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/search_videos_by_track.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/repositories/tracks_collections_history_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/add_tracks_collection_to_history.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/use_cases/get_ordered_history.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/repositories/network_tracks_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_track/domain/repositories/search_videos_by_track_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/download_track.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/use_cases/get_tracks_with_loading_observer_from_tracks_collection_with_offset.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/repositories/network_tracks_collections_repository.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/service/network_tracks_collections_service_impl.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_type_and_spotify_id.dart'; -import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/domain/use_cases/get_tracks_collection_by_url.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; +import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; -import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; +import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart'; @@ -72,7 +36,6 @@ import 'package:spotify_downloader/features/presentation/settings/widgets/downlo import 'package:spotify_downloader/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart'; import 'package:spotify_downloader/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart'; -import '../../features/data_domain/settings/settings.dart'; final injector = GetIt.instance; diff --git a/lib/features/data_domain/tracks/services/services/services.dart b/lib/features/data_domain/tracks/services/services/services.dart index 9cdfae2..a60d6ee 100644 --- a/lib/features/data_domain/tracks/services/services/services.dart +++ b/lib/features/data_domain/tracks/services/services/services.dart @@ -1,2 +1,4 @@ export 'download_tracks_service/download_tracks_service.dart'; -export 'get_tracks_service/get_tracks_service.dart'; \ No newline at end of file +export 'get_tracks_service/get_tracks_service.dart'; +export 'download_tracks_service/download_tracks_service_impl.dart'; +export 'get_tracks_service/get_tracks_service_impl.dart'; \ No newline at end of file From 056ab403a2e8c9c767d7e1e9eb9d4d928ce2df72 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 2 Jun 2024 20:46:03 +1000 Subject: [PATCH 07/41] Fixed small memory leak --- .vscode/launch.json | 25 +++++++++++++++++++ ...owload_audio_from_youtube_data_source.dart | 16 ++++++------ .../entities/track_loading_notifier.dart | 13 +++++++++- .../blocs/account_auth/account_auth_bloc.dart | 1 - 4 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5630304 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "spotify_downloader", + "request": "launch", + "type": "dart" + }, + { + "name": "spotify_downloader (profile mode)", + "request": "launch", + "type": "dart", + "flutterMode": "profile" + }, + { + "name": "spotify_downloader (release mode)", + "request": "launch", + "type": "dart", + "flutterMode": "release" + } + ] +} \ No newline at end of file diff --git a/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart index 2a4ea9f..03a266b 100644 --- a/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart @@ -10,7 +10,6 @@ import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/d import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/data/data_sources/tools/tools.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; - class DownloadAudioFromYoutubeDataSource { DownloadAudioFromYoutubeDataSource( {required AudioMetadataEditor audioMetadataEditor, required FileToMp3Converter fileToMp3Converter}) @@ -152,7 +151,7 @@ class DownloadAudioFromYoutubeDataSource { if (await videoFile.exists()) { await videoFile.delete(); } - + await videoFile.create(); final videoFileStream = videoFile.openWrite(); @@ -191,12 +190,11 @@ class DownloadAudioFromYoutubeDataSource { Failure failure = const Failure(message: ''); - Connectivity() - .onConnectivityChanged - .firstWhere((result) => result == ConnectivityResult.none || result == ConnectivityResult.other) - .then((value) { - if (!failureCompleter.isCompleted) { - failureCompleter.complete(const NetworkFailure()); + var connectivitySubscription = Connectivity().onConnectivityChanged.listen((result) async { + if(result == ConnectivityResult.none || result == ConnectivityResult.other) { + if (!failureCompleter.isCompleted) { + failureCompleter.complete(const NetworkFailure()); + } } }); @@ -212,6 +210,8 @@ class DownloadAudioFromYoutubeDataSource { await videoFileStream.close(); yt.close(); + await connectivitySubscription.cancel(); + if (failureCompleter.isCompleted) { return CancellableResult.notSuccessful(failure); } diff --git a/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart index 0042f57..c4b0fb5 100644 --- a/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart @@ -37,9 +37,10 @@ class TrackLoadingNotifier { } void loaded(String savePath) { - if (_status == LoadingTrackStatus.loading || _status == LoadingTrackStatus.loadingCancelled) { + if (_status == LoadingTrackStatus.loading) { _status = LoadingTrackStatus.loaded; _loadedStreamController.add(savePath); + _closeAllStreams(); } } @@ -47,6 +48,7 @@ class TrackLoadingNotifier { if (_status == LoadingTrackStatus.loading || _status == LoadingTrackStatus.waitInLoadingQueue) { _status = LoadingTrackStatus.loadingCancelled; _loadingCancelledStreamController.add(null); + _closeAllStreams(); } } @@ -56,6 +58,15 @@ class TrackLoadingNotifier { _status == LoadingTrackStatus.loadingCancelled) { _status = LoadingTrackStatus.failure; _loadingFailureStreamController.add(failure); + _closeAllStreams(); } } + + Future _closeAllStreams() async { + await _startLoadingStreamController.close(); + await _loadingPercentChangedStreamController.close(); + await _loadedStreamController.close(); + await _loadingCancelledStreamController.close(); + await _loadingFailureStreamController.close(); + } } diff --git a/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart b/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart index f8ab8bc..f2ba43a 100644 --- a/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart +++ b/lib/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/features/data_domain/auth/local_auth/domain/use_cases/clear_user_credentials.dart'; import 'package:spotify_downloader/features/data_domain/auth/service/use_cases/authorize_user.dart'; From 985a8ea3dc7001901000e4557b055c8cff3fb020 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 2 Jun 2024 21:55:16 +1000 Subject: [PATCH 08/41] Fixed big leak of memory --- ...ading_track_observer_subsribe_with_id.dart | 12 +++ .../loading_track_observer_with_id.dart | 8 -- .../loading_tracks_collection.dart | 2 +- .../loading_tracks_collection_controller.dart | 84 +++++++++++++------ ...bserve_tracks_loading_repository_impl.dart | 4 +- 5 files changed, 72 insertions(+), 38 deletions(-) create mode 100644 lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_subsribe_with_id.dart delete mode 100644 lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_subsribe_with_id.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_subsribe_with_id.dart new file mode 100644 index 0000000..35c418c --- /dev/null +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_subsribe_with_id.dart @@ -0,0 +1,12 @@ +import 'dart:async'; + +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; + +class LoadingTrackObserverSubscriptionWithId { + LoadingTrackObserverSubscriptionWithId( + {required this.loadingTrackObserver, required this.spotifyId, required this.loadingTrackObserverSubscribtions}); + + final LoadingTrackObserver loadingTrackObserver; + final String spotifyId; + final List loadingTrackObserverSubscribtions; +} diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart deleted file mode 100644 index 641e7f9..0000000 --- a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_track_observer_with_id.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; - -class LoadingTrackObserverWithId { - LoadingTrackObserverWithId({required this.loadingTrackObserver, required this.spotifyId}); - - final LoadingTrackObserver loadingTrackObserver; - final String spotifyId; -} diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart index cf15f32..125a3e5 100644 --- a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart @@ -1,4 +1,4 @@ -export 'loading_track_observer_with_id.dart'; +export 'loading_track_observer_subsribe_with_id.dart'; export 'loading_tracks_collection_controller.dart'; export 'loading_tracks_collection_info.dart'; export 'loading_tracks_collection_observer.dart'; diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart index 46071c2..080c80a 100644 --- a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart @@ -4,7 +4,6 @@ import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/d import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; - class LoadingTracksCollectionController { LoadingTracksCollectionController(this._sourceTracksCollection) { _observer = LoadingTracksCollectionObserver( @@ -15,7 +14,8 @@ class LoadingTracksCollectionController { getLoadingStatus: () => _loadingStatus); } - final List _loadingTracks = List.empty(growable: true); + final Map _loadingEndedTracks = Map(); + final List _loadingTracks = List.empty(growable: true); late final LoadingTracksCollectionObserver _observer; LoadingTracksCollectionObserver get observer => _observer; @@ -36,30 +36,64 @@ class LoadingTracksCollectionController { final StreamController _allLoadedStreamController = StreamController(); final StreamController _loadingStatusChangedStreamController = StreamController(); - void addLoadingTrack(LoadingTrackObserverWithId loadingTrack) { - final foundLoadingTrack = _loadingTracks.where((l) => l.spotifyId == loadingTrack.spotifyId).firstOrNull; + void observeLoadingTrack(LoadingTrackObserver loadingTrackObserver, Track track) { + if (loadingTrackObserver.status == LoadingTrackStatus.loadingCancelled) { + return; + } + + final foundLoadingTrack = _loadingTracks.where((l) => l.spotifyId == track.spotifyId).firstOrNull; if (foundLoadingTrack != null) { - if (foundLoadingTrack.loadingTrackObserver.status == LoadingTrackStatus.loading || - foundLoadingTrack.loadingTrackObserver.status == LoadingTrackStatus.waitInLoadingQueue) return; + return; + } - _loadingTracks.remove(foundLoadingTrack); + if (_loadingEndedTracks.containsKey(track.spotifyId)) { + _loadingEndedTracks.remove(track.spotifyId); + } + + if (loadingTrackObserver.status == LoadingTrackStatus.waitInLoadingQueue || + loadingTrackObserver.status == LoadingTrackStatus.loading) { + _startLoadingTrackObserve(loadingTrackObserver, track); + } else { + _loadingEndedTracks[track.spotifyId] = loadingTrackObserver.status; } - _subscribeToLoadingTrack(loadingTrack); + _update(); + } + + void _startLoadingTrackObserve(LoadingTrackObserver loadingTrackObserver, Track track) { + var subs = List.empty(growable: true); + var loadingTrack = LoadingTrackObserverSubscriptionWithId( + loadingTrackObserver: loadingTrackObserver, + spotifyId: track.spotifyId, + loadingTrackObserverSubscribtions: subs); + + var loadedSubscription = loadingTrackObserver.loadedStream.listen((event) => _onTrackLoadingEnded(loadingTrack)); + var failureSubscription = loadingTrackObserver.loadingFailureStream.listen((event) => _onTrackLoadingEnded(loadingTrack)); + var cancelSubscription = loadingTrackObserver.loadingCancelledStream.listen((event) => _onTrackLoadingEnded(loadingTrack)); + + subs.addAll([loadedSubscription, failureSubscription, cancelSubscription]); + _loadingTracks.add(loadingTrack); + } + + Future _onTrackLoadingEnded(LoadingTrackObserverSubscriptionWithId loadingTrack) async { + _endLoadingTrackObserve(loadingTrack); + + if(loadingTrack.loadingTrackObserver.status != LoadingTrackStatus.loadingCancelled) { + _loadingEndedTracks[loadingTrack.spotifyId] = loadingTrack.loadingTrackObserver.status; + } + _update(); } - void _subscribeToLoadingTrack(LoadingTrackObserverWithId loadingTrack) { - loadingTrack.loadingTrackObserver.loadedStream.listen((event) => _update()); - loadingTrack.loadingTrackObserver.loadingFailureStream.listen((event) => _update()); + Future _endLoadingTrackObserve(LoadingTrackObserverSubscriptionWithId loadingTrack) async { + if(_loadingTracks.contains(loadingTrack)) { + _loadingTracks.remove(loadingTrack); + } - loadingTrack.loadingTrackObserver.loadingCancelledStream.listen((event) { - if (_loadingTracks.contains(loadingTrack)) { - _loadingTracks.remove(loadingTrack); - } - _update(); - }); + for (var sub in loadingTrack.loadingTrackObserverSubscribtions) { + await sub.cancel(); + } } void _update() { @@ -75,29 +109,25 @@ class LoadingTracksCollectionController { } void _updateLoadingTracksCollectionInfo() { - int totalTracks = _loadingTracks.length; + int totalTracks = _loadingTracks.length + _loadingEndedTracks.length; int loadedTracks = 0; int loadingTracks = 0; int failuredTracks = 0; - for (var loadingTrack in _loadingTracks) { - if (loadingTrack.loadingTrackObserver.status == LoadingTrackStatus.loading || - loadingTrack.loadingTrackObserver.status == LoadingTrackStatus.waitInLoadingQueue) { - loadingTracks++; - continue; - } - - if (loadingTrack.loadingTrackObserver.status == LoadingTrackStatus.failure) { + for (var loadingEndTrackStatus in _loadingEndedTracks.values) { + if (loadingEndTrackStatus == LoadingTrackStatus.failure) { failuredTracks++; continue; } - if (loadingTrack.loadingTrackObserver.status == LoadingTrackStatus.loaded) { + if (loadingEndTrackStatus == LoadingTrackStatus.loaded) { loadedTracks++; continue; } } + loadingTracks = _loadingTracks.length; + _loadingInfo = LoadingTracksCollectionInfo( totalTracks: totalTracks, loadedTracks: loadedTracks, diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart index 4f3602c..b33f2c9 100644 --- a/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/repository/observe_tracks_loading_repository_impl.dart @@ -24,7 +24,7 @@ class ObserveTracksLoadingRepositoryImpl implements ObserveTracksLoadingReposito } @override - void observeLoadingTrack(LoadingTrackObserver loadingTrack, Track track) { + void observeLoadingTrack(LoadingTrackObserver loadingTrackObserver, Track track) { final loadingTracksCollectionId = LoadingTracksCollectionId( spotifyId: track.parentCollection.spotifyId, tracksCollectionType: track.parentCollection.type); @@ -37,6 +37,6 @@ class ObserveTracksLoadingRepositoryImpl implements ObserveTracksLoadingReposito } loadingCollection.controller - .addLoadingTrack(LoadingTrackObserverWithId(loadingTrackObserver: loadingTrack, spotifyId: track.spotifyId)); + .observeLoadingTrack(loadingTrackObserver, track); } } From 88f86c9f2fc9bd50f19a56189a604a62023b12a7 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Fri, 21 Jun 2024 19:17:01 +1000 Subject: [PATCH 09/41] - Created CustomScrollBar Micro fixes: - Appbar text fixed - Appbar became darker - onBackgroundColor became darker - TrackTile design changed a little - SearchField became more like Spotify - Copy/Paste Toolbar became darker - DownloadTrackInfo design changed a little - and another little changes --- lib/core/app/colors/colors.dart | 4 +- lib/core/app/themes/themes.dart | 1 + .../loading_tracks_collection_controller.dart | 2 +- .../download_tracks_collection_screen.dart | 365 +++++++++++------- .../view/download_track_info.dart | 2 +- .../gradient_app_bar_with_opacity.dart | 23 +- .../widgets/network_failure_splash.dart | 2 + .../scrollbar_with_silde_animation.dart | 180 +++++++++ .../widgets/track_tile/view/track_tile.dart | 36 +- .../widgets/tracks_collection_manage_bar.dart | 8 +- .../widgets/widgets.dart | 2 +- .../presentation/main/view/main_screen.dart | 2 +- .../view/language_setting.dart | 1 + .../shared/widgets/search_text_field.dart | 47 ++- lib/generated/intl/messages_en.dart | 88 ++--- lib/generated/l10n.dart | 164 ++++---- lib/l10n/intl_en.arb | 82 ++-- pubspec.lock | 16 +- pubspec.yaml | 4 +- resources/images/svg/search_icon.svg | 7 +- 20 files changed, 663 insertions(+), 373 deletions(-) create mode 100644 lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart diff --git a/lib/core/app/colors/colors.dart b/lib/core/app/colors/colors.dart index 2b2c2c4..1c91f95 100644 --- a/lib/core/app/colors/colors.dart +++ b/lib/core/app/colors/colors.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; const backgroundColor = Color.fromARGB(255, 18, 18, 18); const onBackgroundPrimaryColor = Color.fromARGB(255, 255, 255, 255); -const onBackgroundSecondaryColor = Color.fromARGB(255, 188, 188, 188); +const onBackgroundSecondaryColor = Color.fromARGB(255, 153, 153, 153); const onBackgroundThirdRateColor = Color.fromARGB(255, 110, 110, 110); const surfaceColor = Color.fromARGB(255, 42, 42, 42); @@ -18,7 +18,7 @@ const onPrimaryColor = Color.fromARGB(255, 18, 18, 18); const errorPrimaryColor = Color.fromARGB(255, 255, 102, 91); const searchFieldColor = Color.fromARGB(255, 255, 255, 255); -const onSearchFieldColor = Color.fromARGB(255, 99, 99, 99); +const searchFieldHintColor = Color.fromARGB(255, 59, 59, 59); const dialogColor = Color.fromARGB(255, 59, 59, 59); diff --git a/lib/core/app/themes/themes.dart b/lib/core/app/themes/themes.dart index a31da12..2166522 100644 --- a/lib/core/app/themes/themes.dart +++ b/lib/core/app/themes/themes.dart @@ -10,6 +10,7 @@ final mainTheme = ThemeData( thumbVisibility: const MaterialStatePropertyAll(true), radius: const Radius.circular(10), crossAxisMargin: 5, + mainAxisMargin: 5, thumbColor: MaterialStateProperty.resolveWith((states) { if (states.contains(MaterialState.dragged)) { return primaryColor; diff --git a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart index 080c80a..38f8e2e 100644 --- a/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart +++ b/lib/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_controller.dart @@ -14,7 +14,7 @@ class LoadingTracksCollectionController { getLoadingStatus: () => _loadingStatus); } - final Map _loadingEndedTracks = Map(); + final Map _loadingEndedTracks = {}; final List _loadingTracks = List.empty(growable: true); late final LoadingTracksCollectionObserver _observer; diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index d2eb086..dba903c 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:palette_generator/palette_generator.dart'; @@ -44,17 +45,25 @@ class _DownloadTracksCollectionScreenState extends State(); final FilterTracksBloc _filterTracksBloc = injector.get(); - final ScrollController _screenScrollController = ScrollController(); - final double _tracksCollectionInfoHeight = 250; + final ScrollController _outerScrollController = ScrollController(); + final GlobalKey _headerInsideKey = GlobalKey(); + final GlobalKey _neastedScrollViewKey = GlobalKey(); + + double? _dynamicHeaderHeight; + + final double _appBarHeight = 55; + final double _appBarStartShowingPercent = 0.3; Color _appBarColor = const Color.fromARGB(255, 101, 101, 101); double _appBarOpacity = 0; @override void initState() { super.initState(); - initTracksCollectionBloc(); + _initTracksCollectionBloc(); _getTracksCollectionBloc.add(GetTracksCollectionLoad()); + + _outerScrollController.addListener(_updateAppBarOpacity); } @override @@ -62,10 +71,13 @@ class _DownloadTracksCollectionScreenState extends State(param1: widget.historyTracksCollection); @@ -74,6 +86,19 @@ class _DownloadTracksCollectionScreenState extends State( onNotification: (OverscrollIndicatorNotification overScroll) { - overScroll.disallowIndicator(); - return false; + overScroll.disallowIndicator(); + return false; + }, child: LayoutBuilder(builder: (context, neastedScrollViewConstraints) { + return NestedScrollView( + key: _neastedScrollViewKey, + controller: _outerScrollController, + headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { + return [ + SliverOverlapAbsorber( + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), + sliver: SliverPersistentHeader( + pinned: true, + delegate: CustomSliverPersistentHeaderDelegate( + maxHeight: _dynamicHeaderHeight ?? + _appBarHeight + MediaQuery.of(context).viewPadding.top, + minHeight: _appBarHeight + MediaQuery.of(context).viewPadding.top, + child: LayoutBuilder(builder: (context, constraints) { + WidgetsBinding.instance.addPostFrameCallback((duration) { + _dynamicHeaderHeight = + (_headerInsideKey.currentContext!.findRenderObject() as RenderBox) + .size + .height; + + setState(() {}); + }); + return Stack( + children: [ + Positioned( + bottom: 0, + width: constraints.maxWidth, + child: AnimatedContainer( + key: _headerInsideKey, + duration: const Duration(milliseconds: 700), + decoration: BoxDecoration( + gradient: LinearGradient(colors: [ + _appBarColor, + backgroundColor, + ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), + padding: EdgeInsets.only( + top: MediaQuery.of(context).viewPadding.top + 20, + bottom: 20), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 15), + child: Column(children: [ + Builder(builder: (context) { + return Center( + child: CachedNetworkImage( + width: MediaQuery.of(context).size.width * 0.6, + height: MediaQuery.of(context).size.width * 0.6, + fit: BoxFit.contain, + imageUrl: getTracksCollectionState + .tracksCollection.bigImageUrl ?? + '', + placeholder: (context, imageUrl) => Image.asset( + 'resources/images/another/loading_track_collection_image.png'), + errorWidget: (context, imageUrl, _) => Image.asset( + 'resources/images/another/loading_track_collection_image.png'), + )); + }), + Padding( + padding: const EdgeInsets.only( + top: 10, left: 30, right: 30), + child: Text( + getTracksCollectionState.tracksCollection.name, + style: theme.textTheme.titleLarge, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + Padding( + padding: const EdgeInsets.only(top: 30), + child: TracksCollectionManageBar( + onFilterQueryChanged: (newQuery) => + _filterTracksBloc.add( + FilterTracksChangeFilterQuery( + newQuery: newQuery)), + onAllDownloadButtonClicked: () { + final filterTracksBlocState = + _filterTracksBloc.state; + if (filterTracksBlocState + is! FilterTracksChanged) { + return; + } + + if (!filterTracksBlocState + .isFilterQueryEmpty || + getTracksState + is GetAndDownloadTracksAllGot) { + _getAndDownloadTracksBloc.add( + GetAndDownloadTracksDownloadTracksRange( + tracksRange: filterTracksBlocState + .filteredTracks)); + } else { + _getAndDownloadTracksBloc.add( + GetAndDownloadTracksDownloadAllTracks()); + } + })), + ]))), + ), + ], + ); + }), + )), + ) + ]; }, - child: Scrollbar( - controller: _screenScrollController, - child: CustomScrollView( - controller: _screenScrollController - ..addListener(() { - _appBarOpacity = math.min( - 1, _screenScrollController.offset / _tracksCollectionInfoHeight); - setState(() {}); - }), - slivers: [ - SliverToBoxAdapter( - child: Column(children: [ - Padding( - padding: const EdgeInsets.only(bottom: 30), - child: AnimatedContainer( - duration: const Duration(milliseconds: 700), + body: BlocBuilder( + bloc: _filterTracksBloc, + builder: (context, state) { + if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); + + final filteredTracks = state.filteredTracks; + final isTracksPlaceholdersDisplayed = + getTracksState is! GetAndDownloadTracksAllGot && + state.isFilterQueryEmpty && + getTracksCollectionState.tracksCollection.tracksCount != null; + + return Padding( + padding: + EdgeInsets.only(top: _appBarHeight + MediaQuery.of(context).viewPadding.top), + child: ScrollbarWithSlideAnimation( + animationCurve: Curves.easeInExpo, + durationBeforeHide: const Duration(seconds: 2), + thumbBuilder: (context, isDragging) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 5), + child: Container( + height: 75, + width: 3, decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - _appBarColor, - backgroundColor, - ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), - padding: - EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 15), - child: Column(children: [ - Center( - child: CachedNetworkImage( - width: MediaQuery.of(context).size.width * 0.6, - height: MediaQuery.of(context).size.width * 0.6, - fit: BoxFit.fitWidth, - imageUrl: - getTracksCollectionState.tracksCollection.bigImageUrl ?? '', - placeholder: (context, imageUrl) => Image.asset( - 'resources/images/another/loading_track_collection_image.png'), - errorWidget: (context, imageUrl, _) => Image.asset( - 'resources/images/another/loading_track_collection_image.png'), - )), - Padding( - padding: const EdgeInsets.only(top: 15), - child: Text( - getTracksCollectionState.tracksCollection.name, - style: theme.textTheme.titleLarge, - ), - ), - Padding( - padding: const EdgeInsets.only(top: 30), - child: TracksCollectionManageBar( - onFilterQueryChanged: (newQuery) => _filterTracksBloc.add( - FilterTracksChangeFilterQuery(newQuery: newQuery)), - onAllDownloadButtonClicked: () { - final filterTracksBlocState = _filterTracksBloc.state; - if (filterTracksBlocState is! FilterTracksChanged) { - return; - } - - if (!filterTracksBlocState.isFilterQueryEmpty || - getTracksState is GetAndDownloadTracksAllGot) { - _getAndDownloadTracksBloc.add( - GetAndDownloadTracksDownloadTracksRange( - tracksRange: - filterTracksBlocState.filteredTracks)); - } else { - _getAndDownloadTracksBloc - .add(GetAndDownloadTracksDownloadAllTracks()); - } - })), - ]), + color: isDragging ? primaryColor : onBackgroundSecondaryColor, + borderRadius: BorderRadius.circular(1.5))), + ); + }, + child: ListView.builder( + padding: const EdgeInsets.all(0), + itemCount: isTracksPlaceholdersDisplayed + ? getTracksCollectionState.tracksCollection.tracksCount + : filteredTracks.length, + prototypeItem: const Padding( + padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: TrackTilePlaceholder()), + itemBuilder: (context, index) { + return Stack( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: Builder(builder: (buildContext) { + if (index < (state.filteredTracks.length)) { + return TrackTile( + trackWithLoadingObserver: filteredTracks[index], + key: ObjectKey(filteredTracks[index]), + ); + } + + return const TrackTilePlaceholder(); + }), ), - ), - ), - ])), - BlocBuilder( - bloc: _filterTracksBloc, - builder: (context, state) { - if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); - - final filteredTracks = state.filteredTracks; - final isTracksPlaceholdersDisplayed = - getTracksState is! GetAndDownloadTracksAllGot && - state.isFilterQueryEmpty && - getTracksCollectionState.tracksCollection.tracksCount != null; - - return SliverList.builder( - itemCount: isTracksPlaceholdersDisplayed - ? getTracksCollectionState.tracksCollection.tracksCount - : filteredTracks.length, - itemBuilder: (context, index) { - return Stack( - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 15, vertical: 7.5), - child: Builder(builder: (buildContext) { - if (index < (state.filteredTracks.length)) { - return TrackTile( - trackWithLoadingObserver: filteredTracks[index], - key: ObjectKey(filteredTracks[index]), - ); - } - - return const TrackTilePlaceholder(); - }), + Builder( + builder: (buildContext) { + if (getTracksState + is GetAndDownloadTracksAfterPartGotNetworkFailure) { + return Positioned.fill( + child: IgnorePointer( + child: Container( + color: const Color.fromARGB(50, 0, 0, 0), + height: 10, + ), ), - Builder( - builder: (buildContext) { - if (getTracksState - is GetAndDownloadTracksAfterPartGotNetworkFailure) { - return Positioned.fill( - child: IgnorePointer( - child: Container( - color: const Color.fromARGB(50, 0, 0, 0), - height: 10, - ), - ), - ); - } - - return Container(); - }, - ) - ], - ); - }); - }, - ), - ]))), + ); + } + + return Container(); + }, + ) + ], + ); + }, + ), + ), + ); + }, + ), + ); + })), ) ]); } @@ -286,6 +366,7 @@ class _DownloadTracksCollectionScreenState extends State maxHeight; + + @override + double get minExtent => minHeight; + + @override + bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) => true; +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart index be75ffa..97a7bfa 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart @@ -122,7 +122,7 @@ class _DownloadTrackInfoState extends State { )), ], )), - const Divider(color: onSurfaceSecondaryColor, height: 20), + const Divider(color: onSurfaceSecondaryColor, height: 20, thickness: 0.3), DownloadTrackInfoStatusTile(trackWithLoadingObserver: state.trackWithLoadingObserver), DownloadTrackInfoTile( title: S.of(context).linkToTheSource, diff --git a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart index 77cf639..66d0856 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart @@ -10,11 +10,11 @@ class GradientAppBarWithOpacity extends StatelessWidget { required this.firstColor, required this.secondaryColor, this.opacity = 0, - this.height, + this.height = 55, this.iconSize = 35}) : isAppBarVisible = true; - const GradientAppBarWithOpacity.invisible({super.key, this.height, this.iconSize = 35}) + const GradientAppBarWithOpacity.invisible({super.key, this.height = 55, this.iconSize = 35}) : isAppBarVisible = false, opacity = 0, title = '', @@ -26,13 +26,13 @@ class GradientAppBarWithOpacity extends StatelessWidget { final Color? firstColor; final Color? secondaryColor; final double opacity; - final double? height; + final double height; final double iconSize; @override Widget build(BuildContext context) { return SizedBox( - height: height ?? 55 + MediaQuery.of(context).viewPadding.top, + height: height + MediaQuery.of(context).viewPadding.top, child: Stack( children: [ Builder( @@ -45,7 +45,7 @@ class GradientAppBarWithOpacity extends StatelessWidget { decoration: BoxDecoration( gradient: LinearGradient(colors: [ firstColor ?? Colors.transparent, - getIntermediateColor(firstColor ?? Colors.transparent, secondaryColor ?? Colors.transparent, 0.5) + getIntermediateColor(firstColor ?? Colors.transparent, secondaryColor ?? Colors.transparent, 0.7) ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), ), ); @@ -68,13 +68,12 @@ class GradientAppBarWithOpacity extends StatelessWidget { height: iconSize, width: iconSize, )), - Padding( - padding: const EdgeInsets.only(left: 30), - child: Opacity( - opacity: opacity, - child: Builder(builder: (context) { - return Center(child: Text(title, style: Theme.of(context).textTheme.titleSmall)); - }), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 30), + child: Opacity( + opacity: opacity, + child: Center(child: Text(title, style: Theme.of(context).textTheme.titleSmall))), ), ), ], diff --git a/lib/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart b/lib/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart index dfa3d42..79effb1 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart @@ -17,6 +17,8 @@ class NetworkFailureSplash extends StatelessWidget { Text( S.of(context).theresSomethingWrongWithConnection, style: theme.textTheme.titleLarge, + maxLines: 2, + textAlign: TextAlign.center, ), TextButton( style: TextButton.styleFrom(foregroundColor: primaryColor), diff --git a/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart b/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart new file mode 100644 index 0000000..543cdbe --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart @@ -0,0 +1,180 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; + +class ScrollbarWithSlideAnimation extends StatefulWidget { + final Widget Function(BuildContext context, bool isDragging)? thumbBuilder; + final ScrollController? controller; + final Widget child; + final double? scrollBarHeight; + + final Curve animationCurve; + final Duration animationDuration; + + final Duration durationBeforeHide; + + const ScrollbarWithSlideAnimation({ + super.key, + required this.child, + this.thumbBuilder, + this.controller, + this.scrollBarHeight, + this.animationCurve = Curves.easeInOut, + this.animationDuration = const Duration(milliseconds: 500), + this.durationBeforeHide = const Duration(seconds: 1) + }); + + @override + ScrollbarWithSlideAnimationState createState() => ScrollbarWithSlideAnimationState(); +} + +class ScrollbarWithSlideAnimationState extends State + with SingleTickerProviderStateMixin { + late final Widget Function(BuildContext context, bool isDragging) _thumbBuilder; + ScrollController? _scrollController; + + double _thumbOffset = 0; + double thumbHeight = 0; + double get _scrollBarHeight => widget.scrollBarHeight ?? context.size!.height; + + late final AnimationController _animationController; + late final Animation _animationOffset; + + bool _isThumbShown = false; + bool _isDragging = false; + + @override + void initState() { + super.initState(); + _thumbBuilder = widget.thumbBuilder ?? _createDeffaultThumb; + + _animationController = AnimationController( + vsync: this, + duration: widget.animationDuration, + ); + + _animationOffset = Tween( + begin: const Offset(1.0, 0.0), + end: const Offset(0.0, 0.0), + ).animate(CurvedAnimation( + parent: _animationController, + curve: widget.animationCurve, + )); + + SchedulerBinding.instance.addPostFrameCallback((timeStamp) { + _scrollController!.position.isScrollingNotifier.addListener(_onScrollStatusChanged); + }); + } + + Widget _createDeffaultThumb(BuildContext context, bool isDragging) { + return Container(width: 6, height: 100, color: Colors.black.withOpacity(0.7)); + } + + @override + void didChangeDependencies() { + if (_scrollController == null) { + _scrollController = widget.controller ?? PrimaryScrollController.of(context); + _scrollController!.addListener(_onScroll); + } else if (widget.controller == null) { + _scrollController!.removeListener(_onScroll); + _scrollController = PrimaryScrollController.of(context); + _scrollController!.addListener(_onScroll); + _scrollController!.position.isScrollingNotifier.addListener(_onScrollStatusChanged); + } + + super.didChangeDependencies(); + } + + @override + void dispose() { + _scrollController?.removeListener(_onScroll); + _animationController.dispose(); + super.dispose(); + } + + void _onScroll() { + setState(() { + _thumbOffset = + _scrollController!.offset / _scrollController!.position.maxScrollExtent * (_scrollBarHeight - thumbHeight); + }); + } + + void _onScrollStatusChanged() { + if (_scrollController!.position.isScrollingNotifier.value && !_isThumbShown) { + _showThumb(); + return; + } + + if (_thumbShouldHide()) { + _schedulePossibleThumbHidding(); + } + } + + void _showThumb() { + _animationController.forward(); + _isThumbShown = true; + } + + bool _thumbShouldHide() => !_scrollController!.position.isScrollingNotifier.value && _isThumbShown && !_isDragging; + + void _schedulePossibleThumbHidding() { + Future.delayed(widget.durationBeforeHide, () { + if (_thumbShouldHide()) { + _animationController.reverse(); + _isThumbShown = false; + } + }); + } + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + widget.child, + Positioned( + right: 0, + top: _thumbOffset, + bottom: 0, + child: Align( + alignment: Alignment.topCenter, + child: SlideTransition( + position: _animationOffset, + child: GestureDetector( + onVerticalDragStart: (_) { + _isDragging = true; + _showThumb(); + }, + onVerticalDragUpdate: _onThumbDragged, + onVerticalDragEnd: (_) { + setState(() { + _isDragging = false; + }); + _schedulePossibleThumbHidding(); + }, + child: Container( + color: Colors.transparent, + child: Builder(builder: (context) { + SchedulerBinding.instance.addPostFrameCallback((duration) { + thumbHeight = context.size!.height; + }); + + return _thumbBuilder(context, _isDragging); + }))), + ))) + ], + ); + } + + void _onThumbDragged(details) { + final newOffset = _calculateOffset(details, _scrollController!); + _scrollController!.jumpTo(newOffset); + } + + double _calculateOffset(DragUpdateDetails details, ScrollController controller) { + double listHeightToScreenHeightRatio = controller.position.maxScrollExtent / _scrollBarHeight; + double newOffset = controller.offset + details.primaryDelta! * listHeightToScreenHeightRatio; + newOffset = + newOffset.clamp(_scrollController!.position.minScrollExtent, _scrollController!.position.maxScrollExtent); + + return newOffset; + } +} \ No newline at end of file diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart index 5ad140e..9756a6d 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart @@ -77,7 +77,7 @@ class _TrackTileState extends State { ), ), Padding( - padding: const EdgeInsets.only(left: 20), + padding: const EdgeInsets.only(left: 20, right: 5), child: Row( children: [ Container( @@ -119,7 +119,6 @@ class _TrackTileState extends State { Container( alignment: Alignment.center, width: 50, - padding: const EdgeInsets.only(right: 10), child: BlocBuilder( bloc: _trackTileBloc, builder: (context, state) { @@ -178,24 +177,21 @@ class _TrackTileState extends State { ], ), ), - Padding( - padding: const EdgeInsets.only(right: 10), - child: BlocBuilder( - bloc: _trackTileBloc, - builder: (context, state) { - return SizedBox( - width: 30, - height: 50, - child: IconButton( - onPressed: () { - showDownloadTrackInfoBottomSheet(context, state.trackWithLoadingObserver); - }, - icon: SvgPicture.asset( - 'resources/images/svg/track_tile/more_info.svg', - fit: BoxFit.fitHeight, - ))); - }, - ), + BlocBuilder( + bloc: _trackTileBloc, + builder: (context, state) { + return SizedBox( + width: 30, + height: 50, + child: IconButton( + onPressed: () { + showDownloadTrackInfoBottomSheet(context, state.trackWithLoadingObserver); + }, + icon: SvgPicture.asset( + 'resources/images/svg/track_tile/more_info.svg', + fit: BoxFit.fitHeight, + ))); + }, ) ], ); diff --git a/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart b/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart index 22544d4..c61c37b 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart @@ -24,10 +24,10 @@ class TracksCollectionManageBar extends StatelessWidget { theme: theme, onChanged: _onFilterQueryChanged, height: 35, - cornerRadius: 10, + cornerRadius: 5, hintText: S.of(context).searchByName, textStyle: theme.textTheme.bodySmall?.copyWith(color: onPrimaryColor), - hintStyle: theme.textTheme.bodySmall?.copyWith(color: onSearchFieldColor), + hintStyle: theme.textTheme.bodySmall?.copyWith(color: searchFieldHintColor, fontWeight: FontWeight.w700), ), ), Container( @@ -38,8 +38,8 @@ class TracksCollectionManageBar extends StatelessWidget { onPressed: _onAllDownloadButtonClicked, style: ButtonStyle( shape: MaterialStateProperty.all( - RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)))), - child: Text(S.of(context).downloadAll, style: theme.textTheme.bodySmall!.copyWith(color: onPrimaryColor)), + RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)))), + child: Text(S.of(context).downloadAll, style: theme.textTheme.bodySmall!.copyWith(color: onPrimaryColor, fontWeight: FontWeight.w700)), ), ) ], diff --git a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart index 8d2305c..04503ca 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart @@ -1,6 +1,6 @@ export 'gradient_app_bar_with_opacity.dart'; export 'network_failure_splash.dart'; +export 'scrollbar_with_silde_animation.dart'; export 'track_tile_placeholder.dart'; export 'tracks_collection_manage_bar.dart'; -export 'download_track_info/view/download_track_info.dart'; export 'track_tile/view/track_tile.dart'; diff --git a/lib/features/presentation/main/view/main_screen.dart b/lib/features/presentation/main/view/main_screen.dart index 9059f9c..44a9cc5 100644 --- a/lib/features/presentation/main/view/main_screen.dart +++ b/lib/features/presentation/main/view/main_screen.dart @@ -58,7 +58,7 @@ class _MainScreenState extends State with AutoRouteAwareStateMixin { alignment: Alignment.bottomCenter, decoration: const BoxDecoration( gradient: LinearGradient( - colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(150, 0, 0, 0)], + colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(200, 0, 0, 0)], begin: Alignment.topCenter, end: Alignment.bottomCenter)), child: Theme( diff --git a/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart b/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart index 11293b1..e05f1f0 100644 --- a/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart +++ b/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart @@ -64,6 +64,7 @@ class _LanguageSettingState extends State { BoxDecoration(color: surfaceColor, borderRadius: BorderRadius.all(Radius.circular(5))), elevation: 0), buttonStyleData: ButtonStyleData( + decoration: BoxDecoration(borderRadius: BorderRadius.circular(5)), overlayColor: MaterialStateProperty.resolveWith((state) { if (state.contains(MaterialState.pressed)) { return onSurfaceSplashColor; diff --git a/lib/features/presentation/shared/widgets/search_text_field.dart b/lib/features/presentation/shared/widgets/search_text_field.dart index 8c1327e..53081f5 100644 --- a/lib/features/presentation/shared/widgets/search_text_field.dart +++ b/lib/features/presentation/shared/widgets/search_text_field.dart @@ -73,28 +73,39 @@ class _SearchTextFieldState extends State { onPressed: () => widget.onSubmitted?.call(textEditingController.text), icon: SvgPicture.asset( 'resources/images/svg/search_icon.svg', + colorFilter: const ColorFilter.mode(onPrimaryColor, BlendMode.srcIn), ), ), Expanded( child: Align( - child: TextField( - controller: textEditingController, - focusNode: textInputFocusNode, - scrollController: scrollController, - onSubmitted: widget.onSubmitted, - onChanged: widget.onChanged, - style: widget.textStyle ?? widget.theme.textTheme.bodyMedium?.copyWith(color: onPrimaryColor), - decoration: InputDecoration( - focusedBorder: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), - disabledBorder: - const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), - enabledBorder: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), - border: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), - contentPadding: const EdgeInsets.symmetric(vertical: 0), - hintText: widget.hintText, - hintStyle: widget.hintStyle ?? widget.theme.textTheme.bodyMedium?.copyWith(color: onSearchFieldColor)), - ), - ), + child: Theme( + data: Theme.of(context).copyWith( + colorScheme: Theme.of(context).colorScheme.copyWith( + surface: surfaceColor, + onSurface: onSurfacePrimaryColor + ) + ), + child: TextField( + controller: textEditingController, + focusNode: textInputFocusNode, + scrollController: scrollController, + onSubmitted: widget.onSubmitted, + onChanged: widget.onChanged, + style: widget.textStyle ?? widget.theme.textTheme.bodyMedium?.copyWith(color: onPrimaryColor), + decoration: InputDecoration( + focusedBorder: + const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), + disabledBorder: + const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), + enabledBorder: + const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), + border: const OutlineInputBorder(borderSide: BorderSide(width: 0, color: Colors.transparent)), + contentPadding: const EdgeInsets.symmetric(vertical: 0), + hintText: widget.hintText, + hintStyle: widget.hintStyle ?? + widget.theme.textTheme.bodyMedium?.copyWith(color: searchFieldHintColor, fontWeight: FontWeight.w700)), + ), + )) ), ], ), diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 582b91f..582e4b8 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -21,12 +21,11 @@ class MessageLookup extends MessageLookupByLibrary { String get localeName => 'en'; static String m0(loaded, failured) => - "Loaded: ${loaded} | Failured: ${failured}"; + "Loaded: ${loaded} | Errors: ${failured}"; static String m1(message) => "Download error: ${message}"; - static String m2(failure) => - "Error occurred while loading active downloads: ${failure}"; + static String m2(failure) => "Error loading active downloads: ${failure}"; static String m3(value) => "${value}M"; @@ -34,100 +33,97 @@ class MessageLookup extends MessageLookupByLibrary { static String m5(views) => "${views} views"; - static String m6(percent) => "Track is loading: ${percent}%"; + static String m6(percent) => "Track loading: ${percent}%"; static String m7(total, loaded, failure, percent) => - "Total: ${total} | Loaded: ${loaded} | Failured: ${failure} | ${percent}%"; + "Total: ${total} | Loaded: ${loaded} | Errors: ${failure} | ${percent}%"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { - "aboutApp": MessageLookupByLibrary.simpleMessage("About app"), - "accountInformationIsBeingLoaded": MessageLookupByLibrary.simpleMessage( - "Account information is being loaded"), + "aboutApp": MessageLookupByLibrary.simpleMessage("About the App"), + "accountInformationIsBeingLoaded": + MessageLookupByLibrary.simpleMessage("Loading account information"), "activeDownloads": - MessageLookupByLibrary.simpleMessage("Active downloads"), + MessageLookupByLibrary.simpleMessage("Active Downloads"), "allTracksAreLoaded": - MessageLookupByLibrary.simpleMessage("All tracks are loaded"), + MessageLookupByLibrary.simpleMessage("All tracks loaded"), "allTracksAreLoadedBody": m0, "changeTheDownloadSource": - MessageLookupByLibrary.simpleMessage("Change the download source"), + MessageLookupByLibrary.simpleMessage("Change Download Source"), "changeTheSource": - MessageLookupByLibrary.simpleMessage("Change the source"), + MessageLookupByLibrary.simpleMessage("Change Source"), "connectionError": - MessageLookupByLibrary.simpleMessage("Connection error"), + MessageLookupByLibrary.simpleMessage("Connection Error"), "couldntLogInToYourAccount": MessageLookupByLibrary.simpleMessage( "Couldn\'t log in to your account"), "developed": MessageLookupByLibrary.simpleMessage("Developed"), "download": MessageLookupByLibrary.simpleMessage("Download"), - "downloadAll": MessageLookupByLibrary.simpleMessage("Download all"), + "downloadAll": MessageLookupByLibrary.simpleMessage("Download All"), "downloadError": m1, "downloadFromLink": - MessageLookupByLibrary.simpleMessage("Download from link"), + MessageLookupByLibrary.simpleMessage("Download from Link"), "downloadFromLinkTextFieldHintText": - MessageLookupByLibrary.simpleMessage( - "Link to a track, playlist, or album"), + MessageLookupByLibrary.simpleMessage("What you want to download?"), "downloadLikedTracks": - MessageLookupByLibrary.simpleMessage("Download liked tracks"), + MessageLookupByLibrary.simpleMessage("Download Liked Tracks"), "errorOccurredWhileLoadingActiveDownloads": m2, "grant": MessageLookupByLibrary.simpleMessage("Grant"), "grantPermissions": - MessageLookupByLibrary.simpleMessage("Grant permissions"), + MessageLookupByLibrary.simpleMessage("Grant Permissions"), "history": MessageLookupByLibrary.simpleMessage("History"), - "incorrectLink": MessageLookupByLibrary.simpleMessage("Incorrect link"), + "incorrectLink": MessageLookupByLibrary.simpleMessage("Invalid Link"), "language": MessageLookupByLibrary.simpleMessage("Language"), "likedTracksTitle": - MessageLookupByLibrary.simpleMessage("Liked tracks"), - "linkToTheSource": - MessageLookupByLibrary.simpleMessage("Link to the source"), - "logIn": MessageLookupByLibrary.simpleMessage("Log in"), - "logOut": MessageLookupByLibrary.simpleMessage("Log out"), + MessageLookupByLibrary.simpleMessage("Liked Tracks"), + "linkToTheSource": MessageLookupByLibrary.simpleMessage("Source Link"), + "logIn": MessageLookupByLibrary.simpleMessage("Log In"), + "logOut": MessageLookupByLibrary.simpleMessage("Log Out"), "main": MessageLookupByLibrary.simpleMessage("Home"), "nMillions": m3, "nThousands": m4, "nView": m5, - "noConnection": MessageLookupByLibrary.simpleMessage("no connection"), + "noConnection": MessageLookupByLibrary.simpleMessage("No connection"), "nothingWasFoundAtThisUrl": MessageLookupByLibrary.simpleMessage( - "Nothing was found at this url"), + "No results found for this URL"), "notificationsPermissionText": MessageLookupByLibrary.simpleMessage( - "To notify you of the download, the app needs access to send notifications"), + "The app needs notification access to notify you of downloads"), "other": MessageLookupByLibrary.simpleMessage("Other"), "refuse": MessageLookupByLibrary.simpleMessage("Refuse"), "saveAllInOneFolder": - MessageLookupByLibrary.simpleMessage("Save all in one folder"), - "searchByName": MessageLookupByLibrary.simpleMessage("Search by name"), - "searchHistory": MessageLookupByLibrary.simpleMessage("Search history"), + MessageLookupByLibrary.simpleMessage("Save All in One Folder"), + "searchByName": MessageLookupByLibrary.simpleMessage("Search by Name"), + "searchHistory": MessageLookupByLibrary.simpleMessage("Search History"), "settings": MessageLookupByLibrary.simpleMessage("Settings"), - "specialThanks": MessageLookupByLibrary.simpleMessage("Special thanks"), + "specialThanks": MessageLookupByLibrary.simpleMessage("Special Thanks"), "spotifySDKAndAccount": - MessageLookupByLibrary.simpleMessage("SpotifySDK and Account"), - "storagePath": MessageLookupByLibrary.simpleMessage("Storage path"), + MessageLookupByLibrary.simpleMessage("Spotify SDK and Account"), + "storagePath": MessageLookupByLibrary.simpleMessage("Storage Path"), "storagePermissionText": MessageLookupByLibrary.simpleMessage( - "To save music to any location on your phone, the app needs permission to work with the storage"), + "The app needs permission to access storage to save music anywhere on your phone"), "theTrackIsLoaded": - MessageLookupByLibrary.simpleMessage("Track is loaded"), + MessageLookupByLibrary.simpleMessage("Track loaded"), "theTrackIsLoading": m6, "theTrackIsNotLoaded": - MessageLookupByLibrary.simpleMessage("Track isn\'t loaded"), + MessageLookupByLibrary.simpleMessage("Track not loaded"), "theresSomethingWrongWithConnection": - MessageLookupByLibrary.simpleMessage( - "There\'s something wrong with connection"), + MessageLookupByLibrary.simpleMessage("Connection Issue"), "toAccessYouNeedToLogIn": MessageLookupByLibrary.simpleMessage( - "To access you need to Log In"), + "You need to log in to access"), "tracksAreBeingLoaded": MessageLookupByLibrary.simpleMessage("Tracks are being loaded"), "tracksAreBeingLoadedBody": m7, "tracksDontLoad": - MessageLookupByLibrary.simpleMessage("Tracks don\'t load ^_^"), - "tryAgain": MessageLookupByLibrary.simpleMessage("Try again"), - "unknownError": MessageLookupByLibrary.simpleMessage("Unknown error"), - "urlCopied": MessageLookupByLibrary.simpleMessage("Url copied!"), + MessageLookupByLibrary.simpleMessage("Nothing is loading ^_^"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Try Again"), + "unknownError": MessageLookupByLibrary.simpleMessage("Unknown Error"), + "urlCopied": MessageLookupByLibrary.simpleMessage("URL copied!"), "urlNotSelected": - MessageLookupByLibrary.simpleMessage("Url not selected"), + MessageLookupByLibrary.simpleMessage("URL not selected"), "youAreNotLoggedInToYourAccount": MessageLookupByLibrary.simpleMessage( "You are not logged in to your account"), "youCanCloseTheAppAndTheDownloadWillContinue": MessageLookupByLibrary.simpleMessage( - "You can close the app and the download will continue !"), + "You can close the app and the download will continue!"), "youCanDeleteThisMessage": MessageLookupByLibrary.simpleMessage( "(you can delete this message)") }; diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 99471ac..e10b8b3 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -50,130 +50,130 @@ class S { return Localizations.of(context, S); } - /// `Download from link` + /// `Download from Link` String get downloadFromLink { return Intl.message( - 'Download from link', + 'Download from Link', name: 'downloadFromLink', desc: '', args: [], ); } - /// `Link to a track, playlist, or album` + /// `What you want to download?` String get downloadFromLinkTextFieldHintText { return Intl.message( - 'Link to a track, playlist, or album', + 'What you want to download?', name: 'downloadFromLinkTextFieldHintText', desc: '', args: [], ); } - /// `Incorrect link` + /// `Invalid Link` String get incorrectLink { return Intl.message( - 'Incorrect link', + 'Invalid Link', name: 'incorrectLink', desc: '', args: [], ); } - /// `Download liked tracks` + /// `Download Liked Tracks` String get downloadLikedTracks { return Intl.message( - 'Download liked tracks', + 'Download Liked Tracks', name: 'downloadLikedTracks', desc: '', args: [], ); } - /// `Liked tracks` + /// `Liked Tracks` String get likedTracksTitle { return Intl.message( - 'Liked tracks', + 'Liked Tracks', name: 'likedTracksTitle', desc: '', args: [], ); } - /// `Active downloads` + /// `Active Downloads` String get activeDownloads { return Intl.message( - 'Active downloads', + 'Active Downloads', name: 'activeDownloads', desc: '', args: [], ); } - /// `Error occurred while loading active downloads: {failure}` + /// `Error loading active downloads: {failure}` String errorOccurredWhileLoadingActiveDownloads(Object failure) { return Intl.message( - 'Error occurred while loading active downloads: $failure', + 'Error loading active downloads: $failure', name: 'errorOccurredWhileLoadingActiveDownloads', desc: '', args: [failure], ); } - /// `Tracks don't load ^_^` + /// `Nothing is loading ^_^` String get tracksDontLoad { return Intl.message( - 'Tracks don\'t load ^_^', + 'Nothing is loading ^_^', name: 'tracksDontLoad', desc: '', args: [], ); } - /// `About app` + /// `About the App` String get aboutApp { return Intl.message( - 'About app', + 'About the App', name: 'aboutApp', desc: '', args: [], ); } - /// `Special thanks` + /// `Special Thanks` String get specialThanks { return Intl.message( - 'Special thanks', + 'Special Thanks', name: 'specialThanks', desc: '', args: [], ); } - /// `Change the download source` + /// `Change Download Source` String get changeTheDownloadSource { return Intl.message( - 'Change the download source', + 'Change Download Source', name: 'changeTheDownloadSource', desc: '', args: [], ); } - /// `There's something wrong with connection` + /// `Connection Issue` String get theresSomethingWrongWithConnection { return Intl.message( - 'There\'s something wrong with connection', + 'Connection Issue', name: 'theresSomethingWrongWithConnection', desc: '', args: [], ); } - /// `Try again` + /// `Try Again` String get tryAgain { return Intl.message( - 'Try again', + 'Try Again', name: 'tryAgain', desc: '', args: [], @@ -210,90 +210,90 @@ class S { ); } - /// `Nothing was found at this url` + /// `No results found for this URL` String get nothingWasFoundAtThisUrl { return Intl.message( - 'Nothing was found at this url', + 'No results found for this URL', name: 'nothingWasFoundAtThisUrl', desc: '', args: [], ); } - /// `To access you need to Log In` + /// `You need to log in to access` String get toAccessYouNeedToLogIn { return Intl.message( - 'To access you need to Log In', + 'You need to log in to access', name: 'toAccessYouNeedToLogIn', desc: '', args: [], ); } - /// `Url copied!` + /// `URL copied!` String get urlCopied { return Intl.message( - 'Url copied!', + 'URL copied!', name: 'urlCopied', desc: '', args: [], ); } - /// `Link to the source` + /// `Source Link` String get linkToTheSource { return Intl.message( - 'Link to the source', + 'Source Link', name: 'linkToTheSource', desc: '', args: [], ); } - /// `Url not selected` + /// `URL not selected` String get urlNotSelected { return Intl.message( - 'Url not selected', + 'URL not selected', name: 'urlNotSelected', desc: '', args: [], ); } - /// `Change the source` + /// `Change Source` String get changeTheSource { return Intl.message( - 'Change the source', + 'Change Source', name: 'changeTheSource', desc: '', args: [], ); } - /// `Track isn't loaded` + /// `Track not loaded` String get theTrackIsNotLoaded { return Intl.message( - 'Track isn\'t loaded', + 'Track not loaded', name: 'theTrackIsNotLoaded', desc: '', args: [], ); } - /// `Track is loading: {percent}%` + /// `Track loading: {percent}%` String theTrackIsLoading(Object percent) { return Intl.message( - 'Track is loading: $percent%', + 'Track loading: $percent%', name: 'theTrackIsLoading', desc: '', args: [percent], ); } - /// `Track is loaded` + /// `Track loaded` String get theTrackIsLoaded { return Intl.message( - 'Track is loaded', + 'Track loaded', name: 'theTrackIsLoaded', desc: '', args: [], @@ -310,40 +310,40 @@ class S { ); } - /// `no connection` + /// `No connection` String get noConnection { return Intl.message( - 'no connection', + 'No connection', name: 'noConnection', desc: '', args: [], ); } - /// `Search by name` + /// `Search by Name` String get searchByName { return Intl.message( - 'Search by name', + 'Search by Name', name: 'searchByName', desc: '', args: [], ); } - /// `Download all` + /// `Download All` String get downloadAll { return Intl.message( - 'Download all', + 'Download All', name: 'downloadAll', desc: '', args: [], ); } - /// `Search history` + /// `Search History` String get searchHistory { return Intl.message( - 'Search history', + 'Search History', name: 'searchHistory', desc: '', args: [], @@ -370,30 +370,30 @@ class S { ); } - /// `Grant permissions` + /// `Grant Permissions` String get grantPermissions { return Intl.message( - 'Grant permissions', + 'Grant Permissions', name: 'grantPermissions', desc: '', args: [], ); } - /// `To save music to any location on your phone, the app needs permission to work with the storage` + /// `The app needs permission to access storage to save music anywhere on your phone` String get storagePermissionText { return Intl.message( - 'To save music to any location on your phone, the app needs permission to work with the storage', + 'The app needs permission to access storage to save music anywhere on your phone', name: 'storagePermissionText', desc: '', args: [], ); } - /// `To notify you of the download, the app needs access to send notifications` + /// `The app needs notification access to notify you of downloads` String get notificationsPermissionText { return Intl.message( - 'To notify you of the download, the app needs access to send notifications', + 'The app needs notification access to notify you of downloads', name: 'notificationsPermissionText', desc: '', args: [], @@ -420,20 +420,20 @@ class S { ); } - /// `SpotifySDK and Account` + /// `Spotify SDK and Account` String get spotifySDKAndAccount { return Intl.message( - 'SpotifySDK and Account', + 'Spotify SDK and Account', name: 'spotifySDKAndAccount', desc: '', args: [], ); } - /// `Account information is being loaded` + /// `Loading account information` String get accountInformationIsBeingLoaded { return Intl.message( - 'Account information is being loaded', + 'Loading account information', name: 'accountInformationIsBeingLoaded', desc: '', args: [], @@ -450,20 +450,20 @@ class S { ); } - /// `Unknown error` + /// `Unknown Error` String get unknownError { return Intl.message( - 'Unknown error', + 'Unknown Error', name: 'unknownError', desc: '', args: [], ); } - /// `Connection error` + /// `Connection Error` String get connectionError { return Intl.message( - 'Connection error', + 'Connection Error', name: 'connectionError', desc: '', args: [], @@ -480,20 +480,20 @@ class S { ); } - /// `Log in` + /// `Log In` String get logIn { return Intl.message( - 'Log in', + 'Log In', name: 'logIn', desc: '', args: [], ); } - /// `Log out` + /// `Log Out` String get logOut { return Intl.message( - 'Log out', + 'Log Out', name: 'logOut', desc: '', args: [], @@ -510,20 +510,20 @@ class S { ); } - /// `Storage path` + /// `Storage Path` String get storagePath { return Intl.message( - 'Storage path', + 'Storage Path', name: 'storagePath', desc: '', args: [], ); } - /// `Save all in one folder` + /// `Save All in One Folder` String get saveAllInOneFolder { return Intl.message( - 'Save all in one folder', + 'Save All in One Folder', name: 'saveAllInOneFolder', desc: '', args: [], @@ -560,31 +560,31 @@ class S { ); } - /// `All tracks are loaded` + /// `All tracks loaded` String get allTracksAreLoaded { return Intl.message( - 'All tracks are loaded', + 'All tracks loaded', name: 'allTracksAreLoaded', desc: '', args: [], ); } - /// `Total: {total} | Loaded: {loaded} | Failured: {failure} | {percent}%` + /// `Total: {total} | Loaded: {loaded} | Errors: {failure} | {percent}%` String tracksAreBeingLoadedBody( Object total, Object loaded, Object failure, Object percent) { return Intl.message( - 'Total: $total | Loaded: $loaded | Failured: $failure | $percent%', + 'Total: $total | Loaded: $loaded | Errors: $failure | $percent%', name: 'tracksAreBeingLoadedBody', desc: '', args: [total, loaded, failure, percent], ); } - /// `Loaded: {loaded} | Failured: {failured}` + /// `Loaded: {loaded} | Errors: {failured}` String allTracksAreLoadedBody(Object loaded, Object failured) { return Intl.message( - 'Loaded: $loaded | Failured: $failured', + 'Loaded: $loaded | Errors: $failured', name: 'allTracksAreLoadedBody', desc: '', args: [loaded, failured], @@ -611,10 +611,10 @@ class S { ); } - /// `You can close the app and the download will continue !` + /// `You can close the app and the download will continue!` String get youCanCloseTheAppAndTheDownloadWillContinue { return Intl.message( - 'You can close the app and the download will continue !', + 'You can close the app and the download will continue!', name: 'youCanCloseTheAppAndTheDownloadWillContinue', desc: '', args: [], diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 79520ec..c465ba3 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -1,60 +1,60 @@ { - "downloadFromLink": "Download from link", - "downloadFromLinkTextFieldHintText": "Link to a track, playlist, or album", - "incorrectLink": "Incorrect link", - "downloadLikedTracks": "Download liked tracks", - "likedTracksTitle": "Liked tracks", - "activeDownloads": "Active downloads", - "errorOccurredWhileLoadingActiveDownloads": "Error occurred while loading active downloads: {failure}", - "tracksDontLoad": "Tracks don't load ^_^", - "aboutApp": "About app", - "specialThanks": "Special thanks", - "changeTheDownloadSource": "Change the download source", - "theresSomethingWrongWithConnection": "There's something wrong with connection", - "tryAgain": "Try again", + "downloadFromLink": "Download from Link", + "downloadFromLinkTextFieldHintText": "What you want to download?", + "incorrectLink": "Invalid Link", + "downloadLikedTracks": "Download Liked Tracks", + "likedTracksTitle": "Liked Tracks", + "activeDownloads": "Active Downloads", + "errorOccurredWhileLoadingActiveDownloads": "Error loading active downloads: {failure}", + "tracksDontLoad": "Nothing is loading ^_^", + "aboutApp": "About the App", + "specialThanks": "Special Thanks", + "changeTheDownloadSource": "Change Download Source", + "theresSomethingWrongWithConnection": "Connection Issue", + "tryAgain": "Try Again", "nView": "{views} views", "nThousands": "{value}K", "nMillions": "{value}M", - "nothingWasFoundAtThisUrl": "Nothing was found at this url", - "toAccessYouNeedToLogIn": "To access you need to Log In", - "urlCopied": "Url copied!", - "linkToTheSource": "Link to the source", - "urlNotSelected": "Url not selected", - "changeTheSource": "Change the source", - "theTrackIsNotLoaded": "Track isn't loaded", - "theTrackIsLoading": "Track is loading: {percent}%", - "theTrackIsLoaded": "Track is loaded", + "nothingWasFoundAtThisUrl": "No results found for this URL", + "toAccessYouNeedToLogIn": "You need to log in to access", + "urlCopied": "URL copied!", + "linkToTheSource": "Source Link", + "urlNotSelected": "URL not selected", + "changeTheSource": "Change Source", + "theTrackIsNotLoaded": "Track not loaded", + "theTrackIsLoading": "Track loading: {percent}%", + "theTrackIsLoaded": "Track loaded", "downloadError": "Download error: {message}", - "noConnection": "no connection", - "searchByName": "Search by name", - "downloadAll": "Download all", - "searchHistory": "Search history", + "noConnection": "No connection", + "searchByName": "Search by Name", + "downloadAll": "Download All", + "searchHistory": "Search History", "main": "Home", "history": "History", - "grantPermissions": "Grant permissions", - "storagePermissionText": "To save music to any location on your phone, the app needs permission to work with the storage", - "notificationsPermissionText": "To notify you of the download, the app needs access to send notifications", + "grantPermissions": "Grant Permissions", + "storagePermissionText": "The app needs permission to access storage to save music anywhere on your phone", + "notificationsPermissionText": "The app needs notification access to notify you of downloads", "grant": "Grant", "refuse": "Refuse", - "spotifySDKAndAccount": "SpotifySDK and Account", - "accountInformationIsBeingLoaded": "Account information is being loaded", + "spotifySDKAndAccount": "Spotify SDK and Account", + "accountInformationIsBeingLoaded": "Loading account information", "youAreNotLoggedInToYourAccount": "You are not logged in to your account", - "unknownError": "Unknown error", - "connectionError": "Connection error", + "unknownError": "Unknown Error", + "connectionError": "Connection Error", "couldntLogInToYourAccount": "Couldn't log in to your account", - "logIn": "Log in", - "logOut": "Log out", + "logIn": "Log In", + "logOut": "Log Out", "download": "Download", - "storagePath": "Storage path", - "saveAllInOneFolder": "Save all in one folder", + "storagePath": "Storage Path", + "saveAllInOneFolder": "Save All in One Folder", "settings": "Settings", "other": "Other", "tracksAreBeingLoaded": "Tracks are being loaded", - "allTracksAreLoaded": "All tracks are loaded", - "tracksAreBeingLoadedBody": "Total: {total} | Loaded: {loaded} | Failured: {failure} | {percent}%", - "allTracksAreLoadedBody": "Loaded: {loaded} | Failured: {failured}", + "allTracksAreLoaded": "All tracks loaded", + "tracksAreBeingLoadedBody": "Total: {total} | Loaded: {loaded} | Errors: {failure} | {percent}%", + "allTracksAreLoadedBody": "Loaded: {loaded} | Errors: {failured}", "developed": "Developed", "language": "Language", - "youCanCloseTheAppAndTheDownloadWillContinue": "You can close the app and the download will continue !", + "youCanCloseTheAppAndTheDownloadWillContinue": "You can close the app and the download will continue!", "youCanDeleteThisMessage": "(you can delete this message)" } \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 1aa5c5d..2019cb3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -305,14 +305,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" - draggable_scrollbar: - dependency: "direct main" - description: - name: draggable_scrollbar - sha256: a906e27fc1ee056e2942d66989dd0cb5b70a361e7d44af566cfa1b584054eac3 - url: "https://pub.dev" - source: hosted - version: "0.1.0" dropdown_button2: dependency: "direct main" description: @@ -385,6 +377,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + flexible_scrollbar: + dependency: "direct main" + description: + name: flexible_scrollbar + sha256: f5b808009624c49929b9a9c19c41c36fefeac7d8f36cb84558fd26614158d6e9 + url: "https://pub.dev" + source: hosted + version: "0.1.3" flutter: dependency: "direct main" description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index ca2316a..f19dcb1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: spotify_downloader description: A new Flutter project. publish_to: 'none' -version: 1.0.2+1 +version: 1.1.0+1 environment: sdk: '>=3.1.4 <4.0.0' @@ -29,7 +29,6 @@ dependencies: cached_network_image: ^3.3.0 path: ^1.8.3 connectivity_plus: ^5.0.2 - draggable_scrollbar: ^0.1.0 modal_bottom_sheet: 3.0.0-pre awesome_notifications_core: ^0.8.1 awesome_notifications: ^0.8.2 @@ -41,6 +40,7 @@ dependencies: sdk: flutter dropdown_button2: ^2.3.9 flutter_background: ^1.2.0 + flexible_scrollbar: ^0.1.3 dev_dependencies: flutter_test: diff --git a/resources/images/svg/search_icon.svg b/resources/images/svg/search_icon.svg index 19d5294..a55a995 100644 --- a/resources/images/svg/search_icon.svg +++ b/resources/images/svg/search_icon.svg @@ -1,3 +1,4 @@ - - - + + + \ No newline at end of file From 6d357068ec04554d3525706b438ebf843b0aab52 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 22 Jun 2024 15:00:21 +1000 Subject: [PATCH 10/41] - Finaly end developing of ScrollBar. - Other small fixes --- ...tom_sliver_persistent_header_delegate.dart | 30 ++ .../download_tracks_collection_screen.dart | 393 ++++++++---------- .../download_tracks_collection_header.dart | 65 +++ .../gradient_app_bar_with_opacity.dart | 2 +- .../scrollbar_with_silde_animation.dart | 103 +++-- .../history/view/history_screen.dart | 2 +- .../presentation/home/view/home_screen.dart | 1 - 7 files changed, 339 insertions(+), 257 deletions(-) create mode 100644 lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart diff --git a/lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart b/lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart new file mode 100644 index 0000000..f575a32 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart @@ -0,0 +1,30 @@ +import 'dart:math'; +import 'package:flutter/material.dart'; + +class CustomSliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate { + CustomSliverPersistentHeaderDelegate( + {required this.maxHeight, required this.minHeight, required this.child, this.onHeightCalculated}); + + final double minHeight; + final double maxHeight; + final Widget child; + final void Function(double height)? onHeightCalculated; + + @override + double get minExtent => minHeight; + @override + double get maxExtent => maxHeight; + + @override + Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) { + onHeightCalculated?.call(max(minExtent, maxExtent - shrinkOffset)); + + return SizedBox.expand(child: child); + } + + @override + bool shouldRebuild(CustomSliverPersistentHeaderDelegate oldDelegate) { + return maxHeight != oldDelegate.maxHeight || minHeight != oldDelegate.minHeight || child != oldDelegate.child; + } +} + diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index dba903c..949e416 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -1,7 +1,8 @@ import 'package:auto_route/auto_route.dart'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:palette_generator/palette_generator.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; @@ -13,7 +14,9 @@ import 'package:spotify_downloader/features/presentation/download_tracks_collect import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; -import 'dart:math' as math; + +import '../custom_sliver_persistent_header_delegate.dart'; +import '../widgets/download_tracks_collection_header.dart'; abstract class DownloadTracksCollectionScreen extends StatefulWidget { final String? url; @@ -45,25 +48,27 @@ class _DownloadTracksCollectionScreenState extends State(); final FilterTracksBloc _filterTracksBloc = injector.get(); - final ScrollController _outerScrollController = ScrollController(); - - final GlobalKey _headerInsideKey = GlobalKey(); - final GlobalKey _neastedScrollViewKey = GlobalKey(); - + final GlobalKey _headerKey = GlobalKey(); + double? _headerHeight; double? _dynamicHeaderHeight; final double _appBarHeight = 55; - final double _appBarStartShowingPercent = 0.3; + final double _appBarStartShowingPercent = 0.5; Color _appBarColor = const Color.fromARGB(255, 101, 101, 101); double _appBarOpacity = 0; + double get appBarHeightWithViewPadding => _appBarHeight + (MediaQuery.maybeOf(context)?.viewPadding.top ?? 0); + @override void initState() { super.initState(); _initTracksCollectionBloc(); _getTracksCollectionBloc.add(GetTracksCollectionLoad()); + } - _outerScrollController.addListener(_updateAppBarOpacity); + @override + void didChangeDependencies() { + super.didChangeDependencies(); } @override @@ -72,8 +77,6 @@ class _DownloadTracksCollectionScreenState extends State( @@ -157,195 +157,134 @@ class _DownloadTracksCollectionScreenState extends State( - onNotification: (OverscrollIndicatorNotification overScroll) { - overScroll.disallowIndicator(); - return false; - }, child: LayoutBuilder(builder: (context, neastedScrollViewConstraints) { - return NestedScrollView( - key: _neastedScrollViewKey, - controller: _outerScrollController, - headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverPersistentHeader( - pinned: true, - delegate: CustomSliverPersistentHeaderDelegate( - maxHeight: _dynamicHeaderHeight ?? - _appBarHeight + MediaQuery.of(context).viewPadding.top, - minHeight: _appBarHeight + MediaQuery.of(context).viewPadding.top, - child: LayoutBuilder(builder: (context, constraints) { - WidgetsBinding.instance.addPostFrameCallback((duration) { - _dynamicHeaderHeight = - (_headerInsideKey.currentContext!.findRenderObject() as RenderBox) - .size - .height; - - setState(() {}); - }); - return Stack( - children: [ - Positioned( - bottom: 0, - width: constraints.maxWidth, - child: AnimatedContainer( - key: _headerInsideKey, - duration: const Duration(milliseconds: 700), - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - _appBarColor, - backgroundColor, - ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), - padding: EdgeInsets.only( - top: MediaQuery.of(context).viewPadding.top + 20, - bottom: 20), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 15), - child: Column(children: [ - Builder(builder: (context) { - return Center( - child: CachedNetworkImage( - width: MediaQuery.of(context).size.width * 0.6, - height: MediaQuery.of(context).size.width * 0.6, - fit: BoxFit.contain, - imageUrl: getTracksCollectionState - .tracksCollection.bigImageUrl ?? - '', - placeholder: (context, imageUrl) => Image.asset( - 'resources/images/another/loading_track_collection_image.png'), - errorWidget: (context, imageUrl, _) => Image.asset( - 'resources/images/another/loading_track_collection_image.png'), - )); - }), - Padding( - padding: const EdgeInsets.only( - top: 10, left: 30, right: 30), - child: Text( - getTracksCollectionState.tracksCollection.name, - style: theme.textTheme.titleLarge, - maxLines: 2, - textAlign: TextAlign.center, + alignment: AlignmentDirectional.topCenter, + child: NotificationListener( + onNotification: (OverscrollIndicatorNotification overScroll) { + overScroll.disallowIndicator(); + return false; + }, + child: ScrollbarWithSlideAnimation( + animationCurve: Curves.easeInOut, + animationDuration: const Duration(milliseconds: 300), + durationBeforeHide: const Duration(seconds: 2), + thumbMargin: EdgeInsets.only(top: appBarHeightWithViewPadding + 10, bottom: 10), + minScrollOffset: + (_headerHeight ?? appBarHeightWithViewPadding) - appBarHeightWithViewPadding, + hideThumbWhenOutOfOffset: true, + thumbBuilder: (context, isDragging) { + return Padding( + padding: const EdgeInsets.only(right: 10), + child: Container( + height: 50, + width: 5, + decoration: BoxDecoration( + color: isDragging ? primaryColor : onBackgroundSecondaryColor, + borderRadius: BorderRadius.circular(2.5))), + ); + }, + child: CustomScrollView( + slivers: [ + SliverPersistentHeader( + pinned: true, + delegate: CustomSliverPersistentHeaderDelegate( + maxHeight: _headerHeight ?? appBarHeightWithViewPadding, + minHeight: appBarHeightWithViewPadding, + onHeightCalculated: (height) { + if (_dynamicHeaderHeight != height) { + SchedulerBinding.instance.addPostFrameCallback((timeStamp) { + setState(() { + _dynamicHeaderHeight = height; + _updateAppBarOpacity(); + }); + }); + } + }, + child: LayoutBuilder(builder: (context, constraints) { + if (_headerHeight == null) { + _planDynamicHeaderHeightUpdate(); + } + + return Stack( + children: [ + Positioned( + bottom: 0, + width: constraints.maxWidth, + child: DownloadTracksCollectionHeader( + key: _headerKey, + backgroundGradientColor: _appBarColor, + title: getTracksCollectionState.tracksCollection.name, + imageUrl: getTracksCollectionState + .tracksCollection.bigImageUrl ?? + '', + onFilterQueryChanged: _onFilterQueryChanged, + onAllDownloadButtonClicked: () => + _onAllDownloadButtonClicked( + filterTracksState: _filterTracksBloc.state, + getAndDownloadTracksState: getTracksState))), + ], + ); + }), + )), + BlocBuilder( + bloc: _filterTracksBloc, + builder: (context, state) { + if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); + + final filteredTracks = state.filteredTracks; + final isTracksPlaceholdersDisplayed = + getTracksState is! GetAndDownloadTracksAllGot && + state.isFilterQueryEmpty && + getTracksCollectionState.tracksCollection.tracksCount != null; + + return SliverPrototypeExtentList.builder( + itemCount: isTracksPlaceholdersDisplayed + ? getTracksCollectionState.tracksCollection.tracksCount + : filteredTracks.length, + prototypeItem: const Padding( + padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: TrackTilePlaceholder()), + itemBuilder: (context, index) { + return Stack( + children: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: Builder(builder: (buildContext) { + if (index < (state.filteredTracks.length)) { + return TrackTile( + trackWithLoadingObserver: filteredTracks[index], + key: ObjectKey(filteredTracks[index]), + ); + } + + return const TrackTilePlaceholder(); + }), + ), + Builder( + builder: (buildContext) { + if (getTracksState + is GetAndDownloadTracksAfterPartGotNetworkFailure) { + return Positioned.fill( + child: IgnorePointer( + child: Container( + color: const Color.fromARGB(50, 0, 0, 0), + height: 10, ), ), - Padding( - padding: const EdgeInsets.only(top: 30), - child: TracksCollectionManageBar( - onFilterQueryChanged: (newQuery) => - _filterTracksBloc.add( - FilterTracksChangeFilterQuery( - newQuery: newQuery)), - onAllDownloadButtonClicked: () { - final filterTracksBlocState = - _filterTracksBloc.state; - if (filterTracksBlocState - is! FilterTracksChanged) { - return; - } - - if (!filterTracksBlocState - .isFilterQueryEmpty || - getTracksState - is GetAndDownloadTracksAllGot) { - _getAndDownloadTracksBloc.add( - GetAndDownloadTracksDownloadTracksRange( - tracksRange: filterTracksBlocState - .filteredTracks)); - } else { - _getAndDownloadTracksBloc.add( - GetAndDownloadTracksDownloadAllTracks()); - } - })), - ]))), - ), - ], + ); + } + + return Container(); + }, + ) + ], + ); + }, ); - }), - )), - ) - ]; - }, - body: BlocBuilder( - bloc: _filterTracksBloc, - builder: (context, state) { - if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); - - final filteredTracks = state.filteredTracks; - final isTracksPlaceholdersDisplayed = - getTracksState is! GetAndDownloadTracksAllGot && - state.isFilterQueryEmpty && - getTracksCollectionState.tracksCollection.tracksCount != null; - - return Padding( - padding: - EdgeInsets.only(top: _appBarHeight + MediaQuery.of(context).viewPadding.top), - child: ScrollbarWithSlideAnimation( - animationCurve: Curves.easeInExpo, - durationBeforeHide: const Duration(seconds: 2), - thumbBuilder: (context, isDragging) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 5), - child: Container( - height: 75, - width: 3, - decoration: BoxDecoration( - color: isDragging ? primaryColor : onBackgroundSecondaryColor, - borderRadius: BorderRadius.circular(1.5))), - ); - }, - child: ListView.builder( - padding: const EdgeInsets.all(0), - itemCount: isTracksPlaceholdersDisplayed - ? getTracksCollectionState.tracksCollection.tracksCount - : filteredTracks.length, - prototypeItem: const Padding( - padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), - child: TrackTilePlaceholder()), - itemBuilder: (context, index) { - return Stack( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), - child: Builder(builder: (buildContext) { - if (index < (state.filteredTracks.length)) { - return TrackTile( - trackWithLoadingObserver: filteredTracks[index], - key: ObjectKey(filteredTracks[index]), - ); - } - - return const TrackTilePlaceholder(); - }), - ), - Builder( - builder: (buildContext) { - if (getTracksState - is GetAndDownloadTracksAfterPartGotNetworkFailure) { - return Positioned.fill( - child: IgnorePointer( - child: Container( - color: const Color.fromARGB(50, 0, 0, 0), - height: 10, - ), - ), - ); - } - - return Container(); - }, - ) - ], - ); - }, - ), - ), - ); - }, - ), - ); - })), - ) + }, + ), + ], + )))) ]); } @@ -385,6 +324,30 @@ class _DownloadTracksCollectionScreenState extends State _filterTracksBloc.add(FilterTracksChangeFilterQuery(newQuery: newQuery)); + + void _onAllDownloadButtonClicked( + {required FilterTracksState filterTracksState, required GetAndDownloadTracksState getAndDownloadTracksState}) { + if (filterTracksState is! FilterTracksChanged) { + return; + } + + if (!filterTracksState.isFilterQueryEmpty || getAndDownloadTracksState is GetAndDownloadTracksAllGot) { + _getAndDownloadTracksBloc + .add(GetAndDownloadTracksDownloadTracksRange(tracksRange: filterTracksState.filteredTracks)); + } else { + _getAndDownloadTracksBloc.add(GetAndDownloadTracksDownloadAllTracks()); + } + } + void _generateAppBarColor(String? imageUrl) { if (imageUrl != null) { Future(() async { @@ -417,25 +380,3 @@ class _DownloadTracksCollectionScreenState extends State maxHeight; - - @override - double get minExtent => minHeight; - - @override - bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) => true; -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart new file mode 100644 index 0000000..52182f6 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart @@ -0,0 +1,65 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; + +class DownloadTracksCollectionHeader extends StatelessWidget { + const DownloadTracksCollectionHeader( + {super.key, + required this.backgroundGradientColor, + required this.title, + required this.imageUrl, + required this.onFilterQueryChanged, + required this.onAllDownloadButtonClicked}); + + final Color backgroundGradientColor; + final String imageUrl; + final String title; + final void Function(String) onFilterQueryChanged; + final void Function() onAllDownloadButtonClicked; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return AnimatedContainer( + duration: const Duration(milliseconds: 700), + decoration: BoxDecoration( + gradient: LinearGradient(colors: [ + backgroundGradientColor, + backgroundColor, + ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), + padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20, bottom: 20), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 15), + child: Column(children: [ + Builder(builder: (context) { + return Center( + child: CachedNetworkImage( + width: MediaQuery.of(context).size.width * 0.6, + height: MediaQuery.of(context).size.width * 0.6, + fit: BoxFit.contain, + imageUrl: imageUrl, + placeholder: (context, imageUrl) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + errorWidget: (context, imageUrl, _) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + )); + }), + Padding( + padding: const EdgeInsets.only(top: 10, left: 30, right: 30), + child: Text( + title, + style: theme.textTheme.titleLarge, + maxLines: 2, + textAlign: TextAlign.center, + ), + ), + Padding( + padding: const EdgeInsets.only(top: 30), + child: TracksCollectionManageBar( + onFilterQueryChanged: onFilterQueryChanged, + onAllDownloadButtonClicked: onAllDownloadButtonClicked)), + ]))); + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart index 66d0856..d22cdd2 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart @@ -73,7 +73,7 @@ class GradientAppBarWithOpacity extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 30), child: Opacity( opacity: opacity, - child: Center(child: Text(title, style: Theme.of(context).textTheme.titleSmall))), + child: Text(title, style: Theme.of(context).textTheme.titleSmall)), ), ), ], diff --git a/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart b/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart index 543cdbe..e743d1e 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/scrollbar_with_silde_animation.dart @@ -1,40 +1,51 @@ +import 'dart:math'; +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; class ScrollbarWithSlideAnimation extends StatefulWidget { final Widget Function(BuildContext context, bool isDragging)? thumbBuilder; + final EdgeInsets thumbMargin; final ScrollController? controller; final Widget child; final double? scrollBarHeight; + final double? minScrollOffset; + final double? maxScrollOfssetFromEnd; + + final bool hideThumbWhenOutOfOffset; + final Curve animationCurve; final Duration animationDuration; - final Duration durationBeforeHide; - const ScrollbarWithSlideAnimation({ - super.key, - required this.child, - this.thumbBuilder, - this.controller, - this.scrollBarHeight, - this.animationCurve = Curves.easeInOut, - this.animationDuration = const Duration(milliseconds: 500), - this.durationBeforeHide = const Duration(seconds: 1) - }); + const ScrollbarWithSlideAnimation( + {super.key, + required this.child, + this.thumbBuilder, + this.controller, + this.scrollBarHeight, + this.animationCurve = Curves.easeInOut, + this.animationDuration = const Duration(milliseconds: 500), + this.thumbMargin = const EdgeInsets.all(0), + this.durationBeforeHide = const Duration(seconds: 1), + this.minScrollOffset, + this.maxScrollOfssetFromEnd, + this.hideThumbWhenOutOfOffset = false}); @override ScrollbarWithSlideAnimationState createState() => ScrollbarWithSlideAnimationState(); } -class ScrollbarWithSlideAnimationState extends State - with SingleTickerProviderStateMixin { +class ScrollbarWithSlideAnimationState extends State with SingleTickerProviderStateMixin { late final Widget Function(BuildContext context, bool isDragging) _thumbBuilder; ScrollController? _scrollController; double _thumbOffset = 0; double thumbHeight = 0; - double get _scrollBarHeight => widget.scrollBarHeight ?? context.size!.height; + double get _scrollBarHeight => (widget.scrollBarHeight ?? context.size!.height) - widget.thumbMargin.vertical; + double get _maxThumbOffset => _scrollBarHeight - thumbHeight; late final AnimationController _animationController; late final Animation _animationOffset; @@ -42,6 +53,13 @@ class ScrollbarWithSlideAnimationState extends State widget.minScrollOffset ?? 0; + double get maxScrollOffsetFromEnd => widget.maxScrollOfssetFromEnd ?? 0; + + Timer? plannedHidding; + @override void initState() { super.initState(); @@ -92,19 +110,42 @@ class ScrollbarWithSlideAnimationState extends State _maxThumbOffset || totalScrollOffset < 0) { + if (!_isOutOfOffsetScroll) { + _isOutOfOffsetScroll = true; + if (widget.hideThumbWhenOutOfOffset) { + _hideThumb(); + } + } + } else { + if (_isOutOfOffsetScroll) { + _isOutOfOffsetScroll = false; + if (widget.hideThumbWhenOutOfOffset) { + _showThumb(); + } + } + } + setState(() { - _thumbOffset = - _scrollController!.offset / _scrollController!.position.maxScrollExtent * (_scrollBarHeight - thumbHeight); + _thumbOffset = _thumbOffset.clamp(0, _maxThumbOffset); }); } void _onScrollStatusChanged() { - if (_scrollController!.position.isScrollingNotifier.value && !_isThumbShown) { + if (_scrollController!.position.isScrollingNotifier.value && !_isThumbShown && !_isOutOfOffsetScroll) { + plannedHidding?.cancel(); + plannedHidding = null; _showThumb(); return; } if (_thumbShouldHide()) { + plannedHidding?.cancel(); + plannedHidding = null; + _schedulePossibleThumbHidding(); } } @@ -114,17 +155,23 @@ class ScrollbarWithSlideAnimationState extends State !_scrollController!.position.isScrollingNotifier.value && _isThumbShown && !_isDragging; + bool _thumbShouldHide() => + _isOutOfOffsetScroll || + (!_scrollController!.position.isScrollingNotifier.value && _isThumbShown && !_isDragging); void _schedulePossibleThumbHidding() { - Future.delayed(widget.durationBeforeHide, () { + plannedHidding = Timer(widget.durationBeforeHide, () { if (_thumbShouldHide()) { - _animationController.reverse(); - _isThumbShown = false; + _hideThumb(); } }); } + void _hideThumb() { + _animationController.reverse(); + _isThumbShown = false; + } + @override Widget build(BuildContext context) { return Stack( @@ -134,7 +181,8 @@ class ScrollbarWithSlideAnimationState extends State with AutoRouteAwareStateM ), Expanded( child: Padding( - padding: const EdgeInsets.only(left: 10), + padding: const EdgeInsets.symmetric(horizontal: 10), child: Text( historyTracksCollection.name, style: theme.textTheme.bodyMedium, diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index bb4c680..a8910b3 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -33,7 +33,6 @@ class _HomeScreenState extends State { @override Widget build(BuildContext context) { final theme = Theme.of(context); - return Scaffold( resizeToAvoidBottomInset: false, body: Padding( From 00be770423a34588305a853d58aee1a6b42f93c3 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 22 Jun 2024 15:43:57 +1000 Subject: [PATCH 11/41] Changed color of status bar --- lib/core/app/spotify_downloader_app.dart | 8 +++++--- lib/core/app/themes/themes.dart | 10 ++++++++++ lib/core/di/injector.dart | 1 + .../view/download_tracks_collection_screen.dart | 4 +--- lib/main.dart | 8 ++------ 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/core/app/spotify_downloader_app.dart b/lib/core/app/spotify_downloader_app.dart index 60a1e4b..bf4ff96 100644 --- a/lib/core/app/spotify_downloader_app.dart +++ b/lib/core/app/spotify_downloader_app.dart @@ -6,9 +6,9 @@ import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/generated/l10n.dart'; class SpotifyDownloaderApp extends StatefulWidget { - const SpotifyDownloaderApp({super.key, required this.locale}); + const SpotifyDownloaderApp({super.key, this.locale}); - final String locale; + final String? locale; static void setLanguage(BuildContext context, String newLanguage) async { final state = context.findAncestorStateOfType<_SpotifyDownloaderAppState>(); @@ -25,7 +25,9 @@ class _SpotifyDownloaderAppState extends State { @override void initState() { - _language = widget.locale; + if (widget.locale != null) { + _language = widget.locale!; + } super.initState(); } diff --git a/lib/core/app/themes/themes.dart b/lib/core/app/themes/themes.dart index 2166522..7724367 100644 --- a/lib/core/app/themes/themes.dart +++ b/lib/core/app/themes/themes.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; part 'text_themes.dart'; @@ -77,6 +78,15 @@ final mainTheme = ThemeData( ), ); +void initTheme() { + SystemChrome.setSystemUIOverlayStyle( + SystemUiOverlayStyle.light.copyWith( + statusBarColor: Colors.transparent, + systemNavigationBarColor: Colors.transparent, + ), + ); +} + void showBigTextSnackBar(String message, BuildContext context, [Duration duration = const Duration(seconds: 2)]) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Column( diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index 47a519d..952b8a6 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -53,6 +53,7 @@ Future _initCore() async { injector.registerSingleton(PermissionsManager()); injector.registerSingleton( RequiringPermissionServicesInitializer(permissionsManager: injector.get())); + await injector.get().initialize(); } Future _provideDataSources() async { diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 949e416..c8fbc89 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -1,8 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:palette_generator/palette_generator.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; @@ -173,7 +171,7 @@ class _DownloadTracksCollectionScreenState extends State main() async { WidgetsFlutterBinding.ensureInitialized(); MetadataGod.initialize(); await initInjector(); - await injector.get().initialize(); - final getLanguageResult = await injector.get().call(null); - runApp(SpotifyDownloaderApp( - locale: getLanguageResult.result ?? 'en', - )); + final locale = await injector.get().call(null); + runApp(SpotifyDownloaderApp(locale: locale.result)); } From 26e379cebcc7262566e7f7416d9fc1cddd8e0f02 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 22 Jun 2024 16:01:58 +1000 Subject: [PATCH 12/41] fixed app lauching issue --- lib/core/app/spotify_downloader_app.dart | 4 +++- lib/core/di/injector.dart | 6 +++++- .../requiring_permission_services_initializer.dart | 2 +- lib/features/presentation/main/view/main_screen.dart | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/core/app/spotify_downloader_app.dart b/lib/core/app/spotify_downloader_app.dart index bf4ff96..57ba39d 100644 --- a/lib/core/app/spotify_downloader_app.dart +++ b/lib/core/app/spotify_downloader_app.dart @@ -25,10 +25,12 @@ class _SpotifyDownloaderAppState extends State { @override void initState() { + super.initState(); + if (widget.locale != null) { _language = widget.locale!; } - super.initState(); + initTheme(); } @override diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index 952b8a6..d709d55 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -45,6 +45,11 @@ Future initInjector() async { _provideRepositories(); _provideUseCases(); _provideBlocs(); + await _initLateCore(); +} + +Future _initLateCore() async { + await injector.get().init(); } Future _initCore() async { @@ -53,7 +58,6 @@ Future _initCore() async { injector.registerSingleton(PermissionsManager()); injector.registerSingleton( RequiringPermissionServicesInitializer(permissionsManager: injector.get())); - await injector.get().initialize(); } Future _provideDataSources() async { diff --git a/lib/core/permissions/requiring_permission_services_initializer.dart b/lib/core/permissions/requiring_permission_services_initializer.dart index 7c2de1f..5bacd13 100644 --- a/lib/core/permissions/requiring_permission_services_initializer.dart +++ b/lib/core/permissions/requiring_permission_services_initializer.dart @@ -12,7 +12,7 @@ class RequiringPermissionServicesInitializer { bool _isNotificationsInitialized = false; bool _isBackgroundInitialized = false; - Future initialize() async { + Future init() async { if (!_isNotificationsInitialized && await permissionsManager.isNotificationsPermissionGranted()) { _isNotificationsInitialized = true; diff --git a/lib/features/presentation/main/view/main_screen.dart b/lib/features/presentation/main/view/main_screen.dart index 44a9cc5..482aca5 100644 --- a/lib/features/presentation/main/view/main_screen.dart +++ b/lib/features/presentation/main/view/main_screen.dart @@ -31,7 +31,7 @@ class _MainScreenState extends State with AutoRouteAwareStateMixin { if (!(await _permissionsManager.isPermissionsGranted()) && context.mounted) { showPermissonsDialog(context, () async { final isPermissionsGranted = await _permissionsManager.requestPermissions(); - await _requiringPermissionServicesInitializer.initialize(); + await _requiringPermissionServicesInitializer.init(); return isPermissionsGranted; }); } From e727e22871fe8a0973824e4042bc5df9c408b09f Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Thu, 27 Jun 2024 09:08:37 +1000 Subject: [PATCH 13/41] separate tracks getting from tracks downloading (GetAndDownloadTracksBloc => GetTracksBloc & DownloadTracksCubit) --- lib/core/app/themes/theme_consts.dart | 1 - lib/core/di/injector.dart | 17 +- .../network_tracks_repository_impl.dart | 2 +- .../blocs/blocs.dart | 3 +- .../download_tracks_cubit.dart | 73 ++++++ .../download_tracks_state.dart | 19 ++ .../get_and_download_tracks_bloc.dart | 231 ------------------ .../get_and_download_tracks_event.dart | 32 --- .../get_and_download_tracks_state.dart | 46 ---- .../blocs/get_tracks/get_tracks_bloc.dart | 162 ++++++++++++ .../blocs/get_tracks/get_tracks_event.dart | 51 ++++ .../blocs/get_tracks/get_tracks_state.dart | 62 +++++ .../download_tracks_collection_screen.dart | 111 +++++---- ...optimized_circular_progress_indicator.dart | 83 +++++++ .../history/view/history_screen.dart | 6 +- .../view/loading_tracks_collections_list.dart | 2 - .../presentation/main/view/main_screen.dart | 84 +++---- pubspec.lock | 2 +- pubspec.yaml | 1 + 19 files changed, 573 insertions(+), 415 deletions(-) delete mode 100644 lib/core/app/themes/theme_consts.dart create mode 100644 lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart create mode 100644 lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_state.dart delete mode 100644 lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart delete mode 100644 lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_event.dart delete mode 100644 lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_state.dart create mode 100644 lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart create mode 100644 lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_event.dart create mode 100644 lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/widgets/strange_optimized_circular_progress_indicator.dart diff --git a/lib/core/app/themes/theme_consts.dart b/lib/core/app/themes/theme_consts.dart deleted file mode 100644 index c9dca85..0000000 --- a/lib/core/app/themes/theme_consts.dart +++ /dev/null @@ -1 +0,0 @@ -const double bottomNavigationBarHeight = 50; \ No newline at end of file diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index d709d55..14e810b 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -20,10 +20,7 @@ import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/ent import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/history_tracks_collections.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/filter_tracks/filter_tracks_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_history_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/get_tracks_collection/get_tracks_collection_by_url_bloc.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; @@ -36,7 +33,6 @@ import 'package:spotify_downloader/features/presentation/settings/widgets/downlo import 'package:spotify_downloader/features/presentation/settings/widgets/language_setting/bloc/language_setting_bloc.dart'; import 'package:spotify_downloader/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart'; - final injector = GetIt.instance; Future initInjector() async { @@ -49,7 +45,7 @@ Future initInjector() async { } Future _initLateCore() async { - await injector.get().init(); + await injector.get().init(); } Future _initCore() async { @@ -202,11 +198,14 @@ void _provideBlocs() { addTracksCollectionToHistory: injector.get(), getTracksCollection: injector.get(), historyTracksCollection: historyCollection)); - injector.registerFactory(() => GetAndDownloadTracksBloc( - downloadTracksRange: injector.get(), - downloadTracksFromGettingObserver: injector.get(), + injector.registerFactory(() => GetTracksBloc( getTracksFromTracksCollection: injector.get(), getTracksWithOffset: injector.get())); + + injector.registerFactory(() => DownloadTracksCubit( + downloadTracksRange: injector.get(), + downloadTracksFromGettingObserver: injector.get(), + downloadTrack: injector.get())); injector.registerFactory(() => FilterTracksBloc()); injector.registerFactoryParam((trackwithLoadingObserver, _) => diff --git a/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart index 2e2f565..66545ea 100644 --- a/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart @@ -24,7 +24,7 @@ class NetworkTracksRepositoryImpl implements NetworkTracksRepository { responseList: responseList, cancellationToken: cancellationTokenSource.token, offset: args.offset, - firstCallbackLength: 200, + firstCallbackLength: 50, callbackLength: 50); final TracksGettingStream tracksGettingStream; diff --git a/lib/features/presentation/download_tracks_collection/blocs/blocs.dart b/lib/features/presentation/download_tracks_collection/blocs/blocs.dart index 2d0e0b0..4890c8c 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/blocs.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/blocs.dart @@ -1,5 +1,6 @@ export 'filter_tracks/filter_tracks_bloc.dart'; -export 'get_and_download_tracks/get_and_download_tracks_bloc.dart'; export 'get_tracks_collection/get_tracks_collection_by_history_bloc.dart'; export 'get_tracks_collection/get_tracks_collection_by_url_bloc.dart'; export 'get_tracks_collection/base/get_tracks_collection_bloc.dart'; +export 'get_tracks/get_tracks_bloc.dart'; +export 'download_tracks/download_tracks_cubit.dart'; \ No newline at end of file diff --git a/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart b/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart new file mode 100644 index 0000000..bd85987 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart @@ -0,0 +1,73 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; + +part 'download_tracks_state.dart'; + +class DownloadTracksCubit extends Cubit { + final DownloadTracksRange _downloadTracksRange; + final DownloadTracksFromGettingObserver _downloadTracksFromGettingObserver; + final DownloadTrack _downloadTrack; + + TracksWithLoadingObserverGettingObserver? _gettingObserver; + List? _trackList; + bool _isAllTracksGot = false; + + DownloadTracksCubit( + {required DownloadTracksRange downloadTracksRange, + required DownloadTracksFromGettingObserver downloadTracksFromGettingObserver, + required DownloadTrack downloadTrack}) + : _downloadTracksRange = downloadTracksRange, + _downloadTracksFromGettingObserver = downloadTracksFromGettingObserver, + _downloadTrack = downloadTrack, + super(DownloadTracksInitial()); + + Future downloadAllTracks() async { + if (_trackList != null && _trackList!.isNotEmpty) { + final downloadTracksRangeResult = await _downloadTracksRange.call(_trackList!); + if (!downloadTracksRangeResult.isSuccessful) { + emit(DownloadTracksFailure(failure: downloadTracksRangeResult.failure)); + return; + } + } + + if (_gettingObserver != null && !_isAllTracksGot) { + final downloadTracksFromGettingObserverResult = await _downloadTracksFromGettingObserver.call(_gettingObserver!); + if (!downloadTracksFromGettingObserverResult.isSuccessful) { + emit(DownloadTracksFailure(failure: downloadTracksFromGettingObserverResult.failure)); + return; + } + } + } + + Future downloadTracksRange(List tracksRange) async { + final downloadTracksRangeResult = await _downloadTracksRange.call(tracksRange); + if (!downloadTracksRangeResult.isSuccessful) { + emit(DownloadTracksFailure(failure: downloadTracksRangeResult.failure)); + return; + } + } + + Future downloadTrack(TrackWithLoadingObserver trackWithLoadingObserver) async { + final downloadTrackResult = await _downloadTrack.call(trackWithLoadingObserver.track); + if (!downloadTrackResult.isSuccessful) { + emit(DownloadTracksFailure(failure: downloadTrackResult.failure)); + return; + } + + trackWithLoadingObserver.loadingObserver = downloadTrackResult.result; + } + + void setGettingObserver(TracksWithLoadingObserverGettingObserver? gettingObserver) { + _gettingObserver = gettingObserver; + } + + void setTracksList(List? tracksList) { + _trackList = tracksList; + } + + void setIsAllTracksGot(bool isAllTracksGot) { + _isAllTracksGot = isAllTracksGot; + } +} diff --git a/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_state.dart b/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_state.dart new file mode 100644 index 0000000..af5f4f7 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_state.dart @@ -0,0 +1,19 @@ +part of 'download_tracks_cubit.dart'; + +sealed class DownloadTracksState extends Equatable { + const DownloadTracksState(); + + @override + List get props => []; +} + +final class DownloadTracksInitial extends DownloadTracksState {} + +final class DownloadTracksFailure extends DownloadTracksState { + const DownloadTracksFailure({required this.failure}); + + final Failure? failure; + + @override + List get props => [failure]; +} \ No newline at end of file diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart deleted file mode 100644 index 6a055f7..0000000 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_bloc.dart +++ /dev/null @@ -1,231 +0,0 @@ -import 'dart:async'; - -import 'package:connectivity_plus/connectivity_plus.dart'; -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/utils.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/domain.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/domain.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; - - -part 'get_and_download_tracks_event.dart'; -part 'get_and_download_tracks_state.dart'; - -class GetAndDownloadTracksBloc extends Bloc { - final GetTracksWithLoadingObserverFromTracksCollection _getTracksFromTracksCollection; - final GetTracksWithLoadingObserverFromTracksCollectionWithOffset _getTracksWithOffset; - - final DownloadTracksRange _downloadTracksRange; - final DownloadTracksFromGettingObserver _downloadTracksFromGettingObserver; - - TracksCollection? _sourceTracksCollection; - - final List _tracksList = List.empty(growable: true); - final List _gettingObserverStreamControllers = List.empty(growable: true); - final List _tracksToLoadingObserversStreamSubscriptions = List.empty(growable: true); - TracksWithLoadingObserverGettingObserver? _gettingObserver; - - bool isAllTracksGot = false; - final Completer subscribeToConnectivityCompleter = Completer(); - - GetAndDownloadTracksBloc( - {required GetTracksWithLoadingObserverFromTracksCollection getTracksFromTracksCollection, - required GetTracksWithLoadingObserverFromTracksCollectionWithOffset getTracksWithOffset, - required DownloadTracksRange downloadTracksRange, - required DownloadTracksFromGettingObserver downloadTracksFromGettingObserver}) - : _getTracksFromTracksCollection = getTracksFromTracksCollection, - _getTracksWithOffset = getTracksWithOffset, - _downloadTracksRange = downloadTracksRange, - _downloadTracksFromGettingObserver = downloadTracksFromGettingObserver, - super(GetAndDownloadTracksInitital()) { - on((event, emit) async => await _subscribeToConnectivity(emit)); - - on(_onGetTracks); - - on(_onDownloadAllTracks); - - on(_onContinueTracksGetting); - - on(_onDownloadTracksRange); - - add(GetAndDownloadTracksSubscribeToConnectivity()); - } - - @override - Future close() async { - await _unsubscribeFromTracksGettingObserver(); - await _unsubscribeTracksFromLoadingObservers(); - return super.close(); - } - - Future _subscribeToConnectivity(Emitter emit) async { - if (subscribeToConnectivityCompleter.isCompleted) return; - subscribeToConnectivityCompleter.complete(); - - await emit.forEach(Connectivity().onConnectivityChanged, onData: _onInternetChanged); - } - - GetAndDownloadTracksState _onInternetChanged(ConnectivityResult status) { - if (status == ConnectivityResult.none || status == ConnectivityResult.other) { - _unsubscribeFromTracksGettingObserver(); - return _getNetworkFailureState(); - } else { - if (state is GetAndDownloadTracksAfterPartGotNetworkFailure) { - if (isAllTracksGot) { - return GetAndDownloadTracksAllGot(tracksWithLoadingObservers: _tracksList); - } else { - add(GetAndDownloadTracksContinueTracksGetting()); - } - } - } - - return state; - } - - Future _onDownloadAllTracks( - GetAndDownloadTracksDownloadAllTracks event, Emitter emit) async { - Future>? downloadTracksFromGettingObserverFuture; - if (_gettingObserver != null) { - downloadTracksFromGettingObserverFuture = _downloadTracksFromGettingObserver.call(_gettingObserver!); - } - - await _onDownloadTracksRange(GetAndDownloadTracksDownloadTracksRange(tracksRange: _tracksList), emit); - - final downloadTracksFromGettingObserverResult = await downloadTracksFromGettingObserverFuture; - if (!(downloadTracksFromGettingObserverResult?.isSuccessful ?? true)) { - emit(GetAndDownloadTracksFailure(failure: downloadTracksFromGettingObserverResult?.failure)); - } - } - - Future _onDownloadTracksRange( - GetAndDownloadTracksDownloadTracksRange event, Emitter emit) async { - final downloadTracksRangeResult = await _downloadTracksRange.call(event.tracksRange); - if (!downloadTracksRangeResult.isSuccessful) { - emit(GetAndDownloadTracksFailure(failure: downloadTracksRangeResult.failure)); - } - } - - Future _onGetTracks(GetAndDownloadTracksGetTracks event, Emitter emit) async { - emit(GetAndDownloadTracksTracksGetting()); - - if (!subscribeToConnectivityCompleter.isCompleted) { - await subscribeToConnectivityCompleter.future; - } - - isAllTracksGot = false; - _tracksList.clear(); - _sourceTracksCollection = event.tracksCollection; - _gettingObserver = null; - await _unsubscribeFromTracksGettingObserver(); - await _unsubscribeTracksFromLoadingObservers(); - - final getTracksResult = await _getTracksFromTracksCollection.call(_sourceTracksCollection!); - if (!getTracksResult.isSuccessful) { - emit(_getStateBasedOnFailure(getTracksResult.failure)); - return; - } - - _gettingObserver = getTracksResult.result!; - await _subscribeToTracksGettingObserver(emit, getTracksResult.result!); - } - - Future _onContinueTracksGetting( - GetAndDownloadTracksContinueTracksGetting event, Emitter emit) async { - if (_sourceTracksCollection == null) return; - if (isAllTracksGot) return; - - _unsubscribeFromTracksGettingObserver(); - - final continueTracksGettingResult = - await _getTracksWithOffset.call((_sourceTracksCollection!, _tracksList.length)); - if (!continueTracksGettingResult.isSuccessful) { - emit(_getStateBasedOnFailure(continueTracksGettingResult.failure)); - return; - } - - await _subscribeToTracksGettingObserver(emit, continueTracksGettingResult.result!); - } - - Future _subscribeToTracksGettingObserver( - Emitter emit, TracksWithLoadingObserverGettingObserver observer) async { - final partGotFuture = emit.forEach(_subscribeToStream(observer.onPartGot), onData: (part) { - _tracksList.addAll(part); - _subscribeTracksToLoadingObservers(part); - - return GetAndDownloadTracksPartGot(tracksWithLoadingObservers: _tracksList); - }); - final onEndedFuture = emit.forEach(_subscribeToStream(observer.onEnded), onData: _onTracksGettingEnded); - - await Future.wait([partGotFuture, onEndedFuture]); - } - - Stream _subscribeToStream(Stream stream) { - final subscribedStreamController = StreamController(); - final streamSub = stream.listen((event) { - subscribedStreamController.add(event); - }); - subscribedStreamController.onCancel = () => streamSub.cancel(); - _gettingObserverStreamControllers.add(subscribedStreamController); - return subscribedStreamController.stream; - } - - void _subscribeTracksToLoadingObservers(List tracksWithLoadingObservers) { - for (var trackWithLoadingObserver in tracksWithLoadingObservers) { - final track = trackWithLoadingObserver.track; - final loadingObserver = trackWithLoadingObserver.loadingObserver; - - if (loadingObserver != null) { - if (loadingObserver.youtubeUrl != null) { - track.youtubeUrl = loadingObserver.youtubeUrl; - } else { - if (loadingObserver.status == LoadingTrackStatus.waitInLoadingQueue) { - _tracksToLoadingObserversStreamSubscriptions.add(loadingObserver.startLoadingStream.listen((youtubeUrl) { - track.youtubeUrl = youtubeUrl; - })); - } - } - } - } - } - - GetAndDownloadTracksState _onTracksGettingEnded(Result result) { - _unsubscribeFromTracksGettingObserver(); - - if (result.isSuccessful) { - isAllTracksGot = true; - return GetAndDownloadTracksAllGot(tracksWithLoadingObservers: _tracksList); - } - - return _getStateBasedOnFailure(result.failure); - } - - GetAndDownloadTracksState _getStateBasedOnFailure(Failure? failure) { - if (failure is NetworkFailure) { - return _getNetworkFailureState(); - } - return GetAndDownloadTracksFailure(failure: failure); - } - - GetAndDownloadTracksState _getNetworkFailureState() { - if (_tracksList.isNotEmpty) { - return GetAndDownloadTracksAfterPartGotNetworkFailure(tracksWithLoadingObservers: _tracksList); - } else { - return GetAndDownloadTracksBeforePartGotNetworkFailure(); - } - } - - Future _unsubscribeFromTracksGettingObserver() async { - for (var controller in _gettingObserverStreamControllers) { - await controller.close(); - } - } - - Future _unsubscribeTracksFromLoadingObservers() async { - for (var sub in _tracksToLoadingObserversStreamSubscriptions) { - await sub.cancel(); - } - } - -} diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_event.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_event.dart deleted file mode 100644 index a641f07..0000000 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_event.dart +++ /dev/null @@ -1,32 +0,0 @@ -part of 'get_and_download_tracks_bloc.dart'; - -sealed class GetAndDownloadTracksEvent extends Equatable { - const GetAndDownloadTracksEvent(); - - @override - List get props => []; -} - -final class GetAndDownloadTracksSubscribeToConnectivity extends GetAndDownloadTracksEvent {} - -final class GetAndDownloadTracksGetTracks extends GetAndDownloadTracksEvent { - const GetAndDownloadTracksGetTracks({required this.tracksCollection}); - - final TracksCollection tracksCollection; - - @override - List get props => [tracksCollection]; -} - -final class GetAndDownloadTracksContinueTracksGetting extends GetAndDownloadTracksEvent {} - -final class GetAndDownloadTracksDownloadAllTracks extends GetAndDownloadTracksEvent {} - -final class GetAndDownloadTracksDownloadTracksRange extends GetAndDownloadTracksEvent { - final List tracksRange; - - const GetAndDownloadTracksDownloadTracksRange({required this.tracksRange}); - - @override - List get props => [tracksRange]; -} diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_state.dart b/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_state.dart deleted file mode 100644 index bcac62a..0000000 --- a/lib/features/presentation/download_tracks_collection/blocs/get_and_download_tracks/get_and_download_tracks_state.dart +++ /dev/null @@ -1,46 +0,0 @@ -part of 'get_and_download_tracks_bloc.dart'; - -sealed class GetAndDownloadTracksState extends Equatable { - const GetAndDownloadTracksState(); - - @override - List get props => []; -} - -final class GetAndDownloadTracksInitital extends GetAndDownloadTracksState {} - -final class GetAndDownloadTracksTracksGetting extends GetAndDownloadTracksState {} - -sealed class GetAndDownloadTracksTracksGot extends GetAndDownloadTracksState { - const GetAndDownloadTracksTracksGot({required this.tracksWithLoadingObservers}) - : _initialTracksLength = tracksWithLoadingObservers.length; - - final List tracksWithLoadingObservers; - final int _initialTracksLength; - - @override - List get props => [tracksWithLoadingObservers, _initialTracksLength]; -} - -final class GetAndDownloadTracksPartGot extends GetAndDownloadTracksTracksGot { - const GetAndDownloadTracksPartGot({required super.tracksWithLoadingObservers}); -} - -final class GetAndDownloadTracksAllGot extends GetAndDownloadTracksTracksGot { - const GetAndDownloadTracksAllGot({required super.tracksWithLoadingObservers}); -} - -final class GetAndDownloadTracksAfterPartGotNetworkFailure extends GetAndDownloadTracksTracksGot { - const GetAndDownloadTracksAfterPartGotNetworkFailure({required super.tracksWithLoadingObservers}); -} - -final class GetAndDownloadTracksBeforePartGotNetworkFailure extends GetAndDownloadTracksState {} - -final class GetAndDownloadTracksFailure extends GetAndDownloadTracksState { - const GetAndDownloadTracksFailure({required this.failure}); - - final Failure? failure; - - @override - List get props => [failure]; -} diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart new file mode 100644 index 0000000..05e2816 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart @@ -0,0 +1,162 @@ +import 'dart:async'; + +import 'package:connectivity_plus/connectivity_plus.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/network_tracks/domain/entities/entities.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/tracks_collection.dart'; + +part 'get_tracks_event.dart'; +part 'get_tracks_state.dart'; + +class GetTracksBloc extends Bloc { + final GetTracksWithLoadingObserverFromTracksCollection _getTracksFromTracksCollection; + final GetTracksWithLoadingObserverFromTracksCollectionWithOffset _getTracksWithOffset; + + TracksCollection? _sourceTracksCollection; + + TracksWithLoadingObserverGettingObserver? _gettingObserver; + StreamSubscription? _gettingObserverPartGotSubscription; + StreamSubscription? _gettingObserverEndSubscription; + + final List _tracksList = List.empty(growable: true); + bool isAllTracksGot = false; + + StreamSubscription? connectivitySubscription; + + GetTracksBloc( + {required GetTracksWithLoadingObserverFromTracksCollection getTracksFromTracksCollection, + required GetTracksWithLoadingObserverFromTracksCollectionWithOffset getTracksWithOffset}) + : _getTracksFromTracksCollection = getTracksFromTracksCollection, + _getTracksWithOffset = getTracksWithOffset, + super(GetTracksInitial()) { + on(_onGetTracks); + on<_GetTracksContinueTracksGetting>(_onCountinueTracksGetting); + + on<_GetTracksGettingObserverPartGot>(_onTracksPartGot); + on<_GetTracksGettingObserverEnd>(_onGettingEnd); + + on<_GetTracksSubscribeToConnectivity>(_onSubscribeToConnectivity); + on<_GetTracksConnectionChanged>(_onConnectionChanged); + + add(_GetTracksSubscribeToConnectivity()); + } + + @override + Future close() { + _unsubscribeFromGettingObserver(); + return super.close(); + } + + Future _onGetTracks(GetTracksGetTracks event, Emitter emit) async { + _sourceTracksCollection = event.tracksCollection; + isAllTracksGot = false; + _tracksList.clear(); + _unsubscribeFromGettingObserver(); + + var startGettingTracksResult = await _getTracksFromTracksCollection.call(event.tracksCollection); + if (!startGettingTracksResult.isSuccessful) { + emit(_getStateBasedOnFailure(startGettingTracksResult.failure)); + return; + } + + _subscribeToGettingObserver(startGettingTracksResult.result!); + emit(GetTracksTracksGettingStarted(observer: _gettingObserver!)); + } + + Future _onCountinueTracksGetting(_GetTracksContinueTracksGetting event, Emitter emit) async { + if (_sourceTracksCollection == null || isAllTracksGot) return; + + var continueGettingTracksResult = await _getTracksWithOffset.call((_sourceTracksCollection!, _tracksList.length)); + if (!continueGettingTracksResult.isSuccessful) { + emit(_getStateBasedOnFailure(continueGettingTracksResult.failure)); + return; + } + + _subscribeToGettingObserver(continueGettingTracksResult.result!); + emit(GetTracksTracksGettingCountinued( + observer: continueGettingTracksResult.result!, tracksWithLoadingObservers: _tracksList)); + } + + Future _onTracksPartGot(_GetTracksGettingObserverPartGot event, Emitter emit) async { + _tracksList.addAll(event.part); + emit(GetTracksPartGot(tracksWithLoadingObservers: _tracksList)); + } + + Future _onGettingEnd(_GetTracksGettingObserverEnd event, Emitter emit) async { + _unsubscribeFromGettingObserver(); + + if (!event.gettingResult.isSuccessful) { + emit(_getStateBasedOnFailure(event.gettingResult.failure)); + return; + } + + switch (event.gettingResult.result!) { + case TracksGettingEndedStatus.cancelled: + break; + case TracksGettingEndedStatus.loaded: + isAllTracksGot = true; + emit(GetTracksAllGot(tracksWithLoadingObservers: _tracksList)); + break; + } + } + + Future _onSubscribeToConnectivity( + _GetTracksSubscribeToConnectivity event, Emitter emit) async { + connectivitySubscription?.cancel(); + connectivitySubscription = Connectivity() + .onConnectivityChanged + .listen((connection) => add(_GetTracksConnectionChanged(connection: connection))); + } + + Future _onConnectionChanged(_GetTracksConnectionChanged event, Emitter emit) async { + if (event.connection == ConnectivityResult.none || event.connection == ConnectivityResult.other) { + _unsubscribeFromGettingObserver(); + emit(_getNetworkFailureState()); + } else { + if (state is GetTracksAfterPartGotNetworkFailure) { + if (isAllTracksGot) { + emit(GetTracksAllGot(tracksWithLoadingObservers: _tracksList)); + return; + } else { + add(_GetTracksContinueTracksGetting()); + } + } + } + } + + void _subscribeToGettingObserver(TracksWithLoadingObserverGettingObserver gettingObserver) { + _gettingObserver = gettingObserver; + + _gettingObserverPartGotSubscription = + gettingObserver.onPartGot.listen((part) => add(_GetTracksGettingObserverPartGot(part: part))); + _gettingObserverEndSubscription = gettingObserver.onEnded + .listen((gettingResult) => add(_GetTracksGettingObserverEnd(gettingResult: gettingResult))); + } + + void _unsubscribeFromGettingObserver() { + _gettingObserverPartGotSubscription?.cancel(); + _gettingObserverEndSubscription?.cancel(); + + _gettingObserver = null; + _gettingObserverPartGotSubscription = null; + _gettingObserverEndSubscription = null; + } + + GetTracksState _getStateBasedOnFailure(Failure? failure) { + if (failure is NetworkFailure) { + return _getNetworkFailureState(); + } + return GetTracksFailure(failure: failure); + } + + GetTracksState _getNetworkFailureState() { + if (_tracksList.isNotEmpty) { + return GetTracksAfterPartGotNetworkFailure(tracksWithLoadingObservers: _tracksList); + } else { + return GetTracksBeforePartGotNetworkFailure(); + } + } +} diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_event.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_event.dart new file mode 100644 index 0000000..dc96b2f --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_event.dart @@ -0,0 +1,51 @@ +part of 'get_tracks_bloc.dart'; + +sealed class GetTracksEvent extends Equatable { + const GetTracksEvent(); + + @override + List get props => []; +} + +final class GetTracksGetTracks extends GetTracksEvent { + const GetTracksGetTracks({required this.tracksCollection}); + + final TracksCollection tracksCollection; + + @override + List get props => [tracksCollection]; +} + +class _GetTracksGettingObserverPartGot extends GetTracksEvent { + const _GetTracksGettingObserverPartGot({required this.part}); + + final List part; + + @override + List get props => [part]; +} + +class _GetTracksGettingObserverEnd extends GetTracksEvent { + const _GetTracksGettingObserverEnd({required this.gettingResult}); + + final Result gettingResult; + + @override + List get props => [gettingResult]; +} + +class _GetTracksSubscribeToConnectivity extends GetTracksEvent { + @override + List get props => []; +} + +class _GetTracksConnectionChanged extends GetTracksEvent { + const _GetTracksConnectionChanged({required this.connection}); + + final ConnectivityResult connection; + + @override + List get props => []; +} + +class _GetTracksContinueTracksGetting extends GetTracksEvent {} \ No newline at end of file diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart new file mode 100644 index 0000000..d3f45b5 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart @@ -0,0 +1,62 @@ +part of 'get_tracks_bloc.dart'; + +sealed class GetTracksState extends Equatable { + const GetTracksState(); + + @override + List get props => []; +} + +final class GetTracksInitial extends GetTracksState {} + +sealed class GetTracksTracksGot extends GetTracksState { + const GetTracksTracksGot({required this.tracksWithLoadingObservers}) + : _initialTracksLength = tracksWithLoadingObservers.length; + + final List tracksWithLoadingObservers; + final int _initialTracksLength; + + @override + List get props => [tracksWithLoadingObservers, _initialTracksLength]; +} + +final class GetTracksPartGot extends GetTracksTracksGot { + const GetTracksPartGot({required super.tracksWithLoadingObservers}); +} + +final class GetTracksAllGot extends GetTracksTracksGot { + const GetTracksAllGot({required super.tracksWithLoadingObservers}); +} + +final class GetTracksTracksGettingStarted extends GetTracksState { + const GetTracksTracksGettingStarted({required this.observer}); + + final TracksWithLoadingObserverGettingObserver observer; + + @override + List get props => [observer]; +} + +final class GetTracksTracksGettingCountinued extends GetTracksTracksGot { + const GetTracksTracksGettingCountinued({required super.tracksWithLoadingObservers, required this.observer}); + + final TracksWithLoadingObserverGettingObserver observer; + + @override + List get props => super.props..add(observer); +} + +final class GetTracksAfterPartGotNetworkFailure extends GetTracksTracksGot { + const GetTracksAfterPartGotNetworkFailure({required super.tracksWithLoadingObservers}); +} + +final class GetTracksBeforePartGotNetworkFailure extends GetTracksState {} + +final class GetTracksFailure extends GetTracksState { + const GetTracksFailure({required this.failure}); + + final Failure? failure; + + @override + List get props => [failure]; +} \ No newline at end of file diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index c8fbc89..22615bf 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -43,8 +43,9 @@ class DownloadTracksCollectionScreenWithHistoryTracksCollection extends Download class _DownloadTracksCollectionScreenState extends State with SingleTickerProviderStateMixin { late final GetTracksCollectionBloc _getTracksCollectionBloc; - final GetAndDownloadTracksBloc _getAndDownloadTracksBloc = injector.get(); + final GetTracksBloc _getTracksBloc = injector.get(); final FilterTracksBloc _filterTracksBloc = injector.get(); + final DownloadTracksCubit _downloadTracksCubit = injector.get(); final GlobalKey _headerKey = GlobalKey(); double? _headerHeight; @@ -71,7 +72,6 @@ class _DownloadTracksCollectionScreenState extends State( - bloc: _getAndDownloadTracksBloc, + BlocListener( + bloc: _getTracksBloc, listener: (context, state) { - if (state is GetAndDownloadTracksFailure) { + if (state is GetTracksFailure) { _onFatalFailure(state.failure); } - if (state is GetAndDownloadTracksTracksGot) { + if (state is GetTracksTracksGot) { _filterTracksBloc.add(FilterTracksChangeSource(newSource: state.tracksWithLoadingObservers)); } + + _updateDownloadTracksCubit(state); }, ) ], @@ -136,23 +139,17 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _getTracksCollectionBloc, builder: (context, getTracksCollectionState) { - if (getTracksCollectionState is GetTracksCollectionNetworkFailure) { - return NetworkFailureSplash( - onRetryAgainButtonClicked: () => _getTracksCollectionBloc.add(GetTracksCollectionLoad())); - } - if (getTracksCollectionState is GetTracksCollectionLoaded) { - return BlocBuilder( - bloc: _getAndDownloadTracksBloc, + return BlocBuilder( + bloc: _getTracksBloc, builder: (context, getTracksState) { - if (getTracksState is GetAndDownloadTracksBeforePartGotNetworkFailure) { + if (getTracksState is GetTracksBeforePartGotNetworkFailure) { return NetworkFailureSplash( - onRetryAgainButtonClicked: () => _getAndDownloadTracksBloc.add( - GetAndDownloadTracksGetTracks( - tracksCollection: getTracksCollectionState.tracksCollection))); + onRetryAgainButtonClicked: () => _getTracksBloc + .add(GetTracksGetTracks(tracksCollection: getTracksCollectionState.tracksCollection))); } - if (getTracksState is GetAndDownloadTracksTracksGot) { + if (getTracksState is GetTracksTracksGot) { return Stack(children: [ Container( alignment: AlignmentDirectional.topCenter, @@ -208,17 +205,18 @@ class _DownloadTracksCollectionScreenState extends State - _onAllDownloadButtonClicked( - filterTracksState: _filterTracksBloc.state, - getAndDownloadTracksState: getTracksState))), + key: _headerKey, + backgroundGradientColor: _appBarColor, + title: getTracksCollectionState.tracksCollection.name, + imageUrl: getTracksCollectionState + .tracksCollection.bigImageUrl ?? + '', + onFilterQueryChanged: _onFilterQueryChanged, + onAllDownloadButtonClicked: () => + _onAllDownloadButtonClicked( + filterTracksState: _filterTracksBloc.state, + getTracksState: getTracksState), + )) ], ); }), @@ -230,7 +228,7 @@ class _DownloadTracksCollectionScreenState extends State _getTracksCollectionBloc.add(GetTracksCollectionLoad())); + } + return const Center(child: CircularProgressIndicator()); }, ); @@ -297,11 +299,11 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _getTracksCollectionBloc, builder: (context, getTracksCollectionState) { - return BlocBuilder( - bloc: _getAndDownloadTracksBloc, + return BlocBuilder( + bloc: _getTracksBloc, builder: (context, getTracksState) { if (getTracksCollectionState is GetTracksCollectionLoaded && - getTracksState is GetAndDownloadTracksTracksGot) { + getTracksState is GetTracksTracksGot) { return GradientAppBarWithOpacity.visible( height: _appBarHeight, firstColor: _appBarColor, @@ -333,16 +335,15 @@ class _DownloadTracksCollectionScreenState extends State _filterTracksBloc.add(FilterTracksChangeFilterQuery(newQuery: newQuery)); void _onAllDownloadButtonClicked( - {required FilterTracksState filterTracksState, required GetAndDownloadTracksState getAndDownloadTracksState}) { + {required FilterTracksState filterTracksState, required GetTracksState getTracksState}) { if (filterTracksState is! FilterTracksChanged) { return; } - if (!filterTracksState.isFilterQueryEmpty || getAndDownloadTracksState is GetAndDownloadTracksAllGot) { - _getAndDownloadTracksBloc - .add(GetAndDownloadTracksDownloadTracksRange(tracksRange: filterTracksState.filteredTracks)); + if (!filterTracksState.isFilterQueryEmpty || getTracksState is GetTracksAllGot) { + _downloadTracksCubit.downloadTracksRange(filterTracksState.filteredTracks); } else { - _getAndDownloadTracksBloc.add(GetAndDownloadTracksDownloadAllTracks()); + _downloadTracksCubit.downloadAllTracks(); } } @@ -377,4 +378,28 @@ class _DownloadTracksCollectionScreenState extends State createState() => _StrangeOptimizedCircularProgressIndicatorState(); +} + +class _StrangeOptimizedCircularProgressIndicatorState extends State + with SingleTickerProviderStateMixin { + late final AnimationController _controller; + late final Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController(vsync: this, duration: const Duration(seconds: 2))..repeat(); + _animation = Tween(begin: 0, end: 1).animate(_controller); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + var circularTheme = Theme.of(context).progressIndicatorTheme; + + return Center( + child: LayoutBuilder(builder: (context, constrains) { + return AnimatedBuilder( + animation: _animation, + builder: (BuildContext context, Widget? child) { + return CustomPaint( + painter: StrangeOptimizedCircularProgressIndicatorPainter( + animationValue: _animation.value, + color: widget.color ?? circularTheme.color ?? Theme.of(context).colorScheme.primary, + strokeWidth: widget.strokeWidth), + size: Size(constrains.maxHeight, constrains.maxHeight), + ); + }, + ); + }), + ); + } +} + +class StrangeOptimizedCircularProgressIndicatorPainter extends CustomPainter { + StrangeOptimizedCircularProgressIndicatorPainter( + {super.repaint, required this.animationValue, required this.color, required this.strokeWidth}); + + final double animationValue; + final Color color; + final double strokeWidth; + + @override + void paint(Canvas canvas, Size size) { + final paint = Paint() + ..color = color + ..style = PaintingStyle.stroke + ..strokeWidth = strokeWidth; + + final start = sin(animationValue * 2 * pi) * pi; + final end = cos(animationValue * 2 * pi) * pi; + + final center = Offset(size.width / 2, size.height / 2); + + final rect = Rect.fromCircle(center: center, radius: size.width / 2); + canvas.drawArc(rect, start, end, false, paint); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) { + return true; + } +} diff --git a/lib/features/presentation/history/view/history_screen.dart b/lib/features/presentation/history/view/history_screen.dart index 6cf9390..9edf044 100644 --- a/lib/features/presentation/history/view/history_screen.dart +++ b/lib/features/presentation/history/view/history_screen.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; -import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -75,6 +74,8 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM CachedNetworkImage( width: 70, height: 70, + fit: BoxFit.fitWidth, + memCacheWidth: (70 * MediaQuery.of(context).devicePixelRatio).round(), imageUrl: historyTracksCollection.imageUrl ?? '', placeholder: (context, imageUrl) => Image.asset('resources/images/another/loading_track_collection_image.png'), @@ -99,9 +100,6 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM ), ); }), - SliverToBoxAdapter( - child: Container(height: bottomNavigationBarHeight), - ) ], ), ); diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart index 47441ba..1d9a626 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; -import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; @@ -51,7 +50,6 @@ class _LoadingTracksCollectionsListState extends State with AutoRouteAwareStateMixin { ), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20), - child: SizedBox( - height: bottomNavigationBarHeight, - child: BottomNavigationBar( - enableFeedback: false, - selectedFontSize: 10, - unselectedFontSize: 10, - selectedItemColor: onBackgroundPrimaryColor, - unselectedItemColor: onBackgroundSecondaryColor, - elevation: 0, - backgroundColor: Colors.transparent, - currentIndex: tabsRouter.activeIndex, - onTap: (index) => tabsRouter.setActiveIndex(index), - items: [ - BottomNavigationBarItem( - icon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/home_icon.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundSecondaryColor, BlendMode.srcIn), - ), - activeIcon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/home_icon_active.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundPrimaryColor, BlendMode.srcIn), - ), - label: S.of(context).main), - BottomNavigationBarItem( - icon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/history_icon.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundSecondaryColor, BlendMode.srcIn), - ), - activeIcon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/history_icon_active.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundPrimaryColor, BlendMode.srcIn), - ), - label: S.of(context).history), - ]), - ), + child: BottomNavigationBar( + enableFeedback: false, + selectedFontSize: 10, + unselectedFontSize: 10, + selectedItemColor: onBackgroundPrimaryColor, + unselectedItemColor: onBackgroundSecondaryColor, + elevation: 0, + backgroundColor: Colors.transparent, + currentIndex: tabsRouter.activeIndex, + onTap: (index) => tabsRouter.setActiveIndex(index), + items: [ + BottomNavigationBarItem( + icon: SvgPicture.asset( + 'resources/images/svg/bottom_bar/home_icon.svg', + height: 25, + width: 25, + colorFilter: const ColorFilter.mode(onBackgroundSecondaryColor, BlendMode.srcIn), + ), + activeIcon: SvgPicture.asset( + 'resources/images/svg/bottom_bar/home_icon_active.svg', + height: 25, + width: 25, + colorFilter: const ColorFilter.mode(onBackgroundPrimaryColor, BlendMode.srcIn), + ), + label: S.of(context).main), + BottomNavigationBarItem( + icon: SvgPicture.asset( + 'resources/images/svg/bottom_bar/history_icon.svg', + height: 25, + width: 25, + colorFilter: const ColorFilter.mode(onBackgroundSecondaryColor, BlendMode.srcIn), + ), + activeIcon: SvgPicture.asset( + 'resources/images/svg/bottom_bar/history_icon_active.svg', + height: 25, + width: 25, + colorFilter: const ColorFilter.mode(onBackgroundPrimaryColor, BlendMode.srcIn), + ), + label: S.of(context).history), + ]), ), ), ), diff --git a/pubspec.lock b/pubspec.lock index 2019cb3..8039728 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -34,7 +34,7 @@ packages: source: hosted version: "2.4.2" async: - dependency: transitive + dependency: "direct main" description: name: async sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" diff --git a/pubspec.yaml b/pubspec.yaml index f19dcb1..0c6df8e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,6 +41,7 @@ dependencies: dropdown_button2: ^2.3.9 flutter_background: ^1.2.0 flexible_scrollbar: ^0.1.3 + async: ^2.11.0 dev_dependencies: flutter_test: From 2e8072e3912ef0aa37719247bd3e6d95cc1bf447 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Fri, 28 Jun 2024 15:25:27 +1000 Subject: [PATCH 14/41] fully rewrited track_tile (optimization issues) tracks download now happening in isolate (optimizations issues) another micro fixes --- lib/core/di/injector.dart | 11 +- lib/core/notifications/notifications.dart | 13 +- .../cancellation_token_class.dart | 1 + .../cancellation_token_source.dart | 14 + ...owload_audio_from_youtube_data_source.dart | 224 ++++++++++------ .../network_tracks_data_source.dart | 5 - .../data/models/get_tracks_args.dart | 4 - .../network_tracks_repository_impl.dart | 2 - .../download_tracks_cubit.dart | 13 +- .../download_tracks_collection_screen.dart | 14 +- .../view/download_track_info_status_tile.dart | 25 +- .../track_tile/bloc/track_tile_bloc.dart | 135 ---------- .../track_tile/bloc/track_tile_event.dart | 21 -- .../track_tile/bloc/track_tile_state.dart | 37 --- .../track_tile/cubit/track_tile_cubit.dart | 84 ++++++ .../track_tile/cubit/track_tile_state.dart | 23 ++ .../widgets/track_tile/view/track_tile.dart | 239 ++++-------------- .../view/track_tile_status_button.dart | 155 ++++++++++++ ...optimized_circular_progress_indicator.dart | 0 ...ollections_loading_notifications_bloc.dart | 3 +- ...lections_loading_notifications_sender.dart | 43 ++-- 21 files changed, 553 insertions(+), 513 deletions(-) delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_event.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_state.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart rename lib/features/presentation/{download_tracks_collection/widgets/track_tile => shared}/widgets/strange_optimized_circular_progress_indicator.dart (100%) diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index 14e810b..bcae163 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -23,7 +23,7 @@ import 'package:spotify_downloader/features/presentation/change_source_video/blo import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; @@ -205,14 +205,11 @@ void _provideBlocs() { injector.registerFactory(() => DownloadTracksCubit( downloadTracksRange: injector.get(), downloadTracksFromGettingObserver: injector.get(), - downloadTrack: injector.get())); + downloadTrack: injector.get(), + cancelTrackLoading: injector.get())); injector.registerFactory(() => FilterTracksBloc()); - injector.registerFactoryParam((trackwithLoadingObserver, _) => - TrackTileBloc( - trackWithLoadingObserver: trackwithLoadingObserver, - downloadTrack: injector.get(), - cancelTrackLoading: injector.get())); + injector.registerFactory(() => TrackTileCubit()); injector.registerFactoryParam((trackwithLoadingObserver, _) => DownloadTrackInfoBloc( trackWithLoadingObserver: trackwithLoadingObserver, cancelTrackLoading: injector.get())); diff --git a/lib/core/notifications/notifications.dart b/lib/core/notifications/notifications.dart index 957eaed..e52e7aa 100644 --- a/lib/core/notifications/notifications.dart +++ b/lib/core/notifications/notifications.dart @@ -2,19 +2,22 @@ import 'package:awesome_notifications/awesome_notifications.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; const String mainChannelKey = 'main_channel'; +const String mainChannelGroupKey = 'main_channel_group'; Future initAwesomeNotifications() async { await AwesomeNotifications().initialize( 'resource://drawable/notifications_icon', [ NotificationChannel( - channelGroupKey: 'main_channel_group', - channelKey: 'main_channel', - channelName: 'Main notifications', - channelDescription: ']', + channelGroupKey: mainChannelGroupKey, + channelKey: mainChannelKey, + channelName: 'Main Notifications', + channelDescription: 'Main Notifications of Spotify Downloader', defaultColor: primaryColor) ], - channelGroups: [NotificationChannelGroup(channelGroupKey: 'main_channel_group', channelGroupName: 'Main group')], + channelGroups: [ + NotificationChannelGroup(channelGroupKey: mainChannelGroupKey, channelGroupName: 'Main Notifications Group') + ], debug: true); AwesomeNotifications().isNotificationAllowed().then((isAllowed) { diff --git a/lib/core/utils/cancellation_token/cancellation_token_class.dart b/lib/core/utils/cancellation_token/cancellation_token_class.dart index 3cc3790..e892e28 100644 --- a/lib/core/utils/cancellation_token/cancellation_token_class.dart +++ b/lib/core/utils/cancellation_token/cancellation_token_class.dart @@ -5,6 +5,7 @@ class CancellationToken { CancellationTokenSource source; bool get isCancelled => source.isCancelled; + Stream get cancelationStream => source.cancellationStream; @override int get hashCode => source.hashCode; diff --git a/lib/core/utils/cancellation_token/cancellation_token_source.dart b/lib/core/utils/cancellation_token/cancellation_token_source.dart index 7f59e34..fa7f609 100644 --- a/lib/core/utils/cancellation_token/cancellation_token_source.dart +++ b/lib/core/utils/cancellation_token/cancellation_token_source.dart @@ -1,11 +1,25 @@ +import 'dart:async'; + import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token_class.dart'; class CancellationTokenSource { + final StreamController _cancellationStreamController = StreamController(); + late final Stream _cancellationStream; + Stream get cancellationStream => _cancellationStream; + bool _isCancelled = false; bool get isCancelled => _isCancelled; + CancellationToken get token => CancellationToken(source: this); + CancellationTokenSource() { + _cancellationStream = _cancellationStreamController.stream.asBroadcastStream(); + } + void cancel() { + if (!_isCancelled) { + _cancellationStreamController.add(null); + } _isCancelled = true; } } diff --git a/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart index 03a266b..a4683ad 100644 --- a/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:ffi'; import 'dart:io'; +import 'dart:isolate'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:http/http.dart'; @@ -26,55 +27,19 @@ class DownloadAudioFromYoutubeDataSource { } Future dowloadAudioFromYoutube(DownloadAudioFromYoutubeArgs args) async { - void Function() cancelFunction = () {}; + CancellationTokenSource cancellationTokenSource = CancellationTokenSource(); + final token = cancellationTokenSource.token; return AudioLoadingStream(streamFunction: (setLoadingPercent) async { try { - CancellationTokenSource cancellationTokenSource = CancellationTokenSource(); - final token = cancellationTokenSource.token; - cancelFunction = cancellationTokenSource.cancel; - - final getDownloadStreamInfoCompute = await _isolatePool.compute(_getDownloadStreamInfo, args); - if (token.isCancelled) { - getDownloadStreamInfoCompute.cancel(); - return const CancellableResult.isCancelled(); - } - - cancelFunction = getDownloadStreamInfoCompute.cancel; - final getDownloadStreamInfoResult = await Future.any([ - getDownloadStreamInfoCompute.future, - Future(() async { - await Connectivity().onConnectivityChanged.firstWhere((connectivityResult) => - connectivityResult == ConnectivityResult.none || connectivityResult == ConnectivityResult.other); - return const CancellableResult.notSuccessful(NetworkFailure()); - }) - ]); - - if (getDownloadStreamInfoResult.isCancelled) { - return const CancellableResult.isCancelled(); - } else if (!getDownloadStreamInfoResult.isSuccessful) { - return CancellableResult.notSuccessful(getDownloadStreamInfoResult.failure); + final downloadVideoResult = await _getAndDownloadVideoFromYoutube(args, token, setLoadingPercent); + if (!downloadVideoResult.isSuccessful) { + return downloadVideoResult; } - final downloadStreamInfo = getDownloadStreamInfoResult.result!; - - final videoPath = - p.join(args.saveDirectoryPath, '${args.audioMetadata.name}.${downloadStreamInfo.container.name}'); + final videoPath = downloadVideoResult.result!; final audioPath = p.join(args.saveDirectoryPath, '${args.audioMetadata.name}.mp3'); - cancelFunction = cancellationTokenSource.cancel; - - await Directory(args.saveDirectoryPath).create(recursive: true); - - final downloadVideoResult = - await _downloadVideoFromYoutube(downloadStreamInfo, videoPath, setLoadingPercent, token); - - if (downloadVideoResult.isCancelled) { - return const CancellableResult.isCancelled(); - } else if (!downloadVideoResult.isSuccessful) { - return CancellableResult.notSuccessful(downloadVideoResult.failure); - } - await _convertFileToMp3(videoPath, audioPath); setLoadingPercent.call(95); @@ -103,8 +68,93 @@ class DownloadAudioFromYoutubeDataSource { return CancellableResult.notSuccessful(Failure(message: e)); } }, cancelFunction: () { - cancelFunction(); + cancellationTokenSource.cancel(); + }); + } + + Future> _getAndDownloadVideoFromYoutube( + DownloadAudioFromYoutubeArgs args, CancellationToken token, Function(double) setLoadingPercent) async { + Completer noNetworkCompleter = Completer(); + final noNetworkSub = Connectivity().onConnectivityChanged.listen((connection) { + if (connection == ConnectivityResult.none || connection == ConnectivityResult.other) { + noNetworkCompleter.complete(); + } }); + + try { + final getDownloadStreamInfoCompute = await _isolatePool.compute(_getDownloadStreamInfo, args); + if (token.isCancelled) { + getDownloadStreamInfoCompute.cancel(); + return const CancellableResult.isCancelled(); + } else if (noNetworkCompleter.isCompleted) { + getDownloadStreamInfoCompute.cancel(); + return const CancellableResult.notSuccessful(NetworkFailure()); + } + + noNetworkCompleter = Completer(); + final tokenWhileGettingStreamSub = + token.cancelationStream.listen((event) => getDownloadStreamInfoCompute.cancel()); + final getDownloadStreamInfoResult = + await Future.any([getDownloadStreamInfoCompute.future, noNetworkCompleter.future]); + + try { + if (noNetworkCompleter.isCompleted) { + getDownloadStreamInfoCompute.cancel(); + return const CancellableResult.notSuccessful(NetworkFailure()); + } + + if (getDownloadStreamInfoResult.isCancelled) { + return const CancellableResult.isCancelled(); + } else if (!getDownloadStreamInfoResult.isSuccessful) { + return CancellableResult.notSuccessful(getDownloadStreamInfoResult.failure); + } + } finally { + tokenWhileGettingStreamSub.cancel(); + } + + final downloadStreamInfo = getDownloadStreamInfoResult.result! as AudioOnlyStreamInfo; + + //--------------------------------------------------------------------------------- + + final videoPath = + p.join(args.saveDirectoryPath, '${args.audioMetadata.name}.${downloadStreamInfo.container.name}'); + + await Directory(args.saveDirectoryPath).create(recursive: true); + + final downloadVideoStream = await _isolatePool + .add<(AudioOnlyStreamInfo, String)>(_downloadVideoFromYoutubeInIsolate, (downloadStreamInfo, videoPath)); + if (token.isCancelled) { + downloadVideoStream.cancel(); + return const CancellableResult.isCancelled(); + } else if (noNetworkCompleter.isCompleted) { + downloadVideoStream.cancel(); + return const CancellableResult.notSuccessful(NetworkFailure()); + } + + noNetworkCompleter = Completer(); + final tokenWhileDownloadVideoSub = token.cancelationStream.listen((event) => downloadVideoStream.cancel()); + final downloadVideoResult = + await Future.any([_handleDownloadStream(downloadVideoStream, setLoadingPercent), noNetworkCompleter.future]); + + try { + if (noNetworkCompleter.isCompleted) { + downloadVideoStream.cancel(); + return const CancellableResult.notSuccessful(NetworkFailure()); + } + + if (downloadVideoResult.isCancelled) { + return const CancellableResult.isCancelled(); + } else if (!downloadVideoResult.isSuccessful) { + return CancellableResult.notSuccessful(downloadVideoResult.failure); + } + } finally { + tokenWhileDownloadVideoSub.cancel(); + } + + return CancellableResult.isSuccessful(videoPath); + } finally { + noNetworkSub.cancel(); + } } Future> _getDownloadStreamInfo( @@ -123,8 +173,8 @@ class DownloadAudioFromYoutubeDataSource { if (token.isCancelled) return const CancellableResult.isCancelled(); downloadStreamInfo = manifest.audioOnly.withHighestBitrate(); + return CancellableResult.isSuccessful(downloadStreamInfo); } catch (e) { - yt.close(); if (e is ClientException || e is SocketException) { return const CancellableResult.notSuccessful(NetworkFailure()); } @@ -135,16 +185,22 @@ class DownloadAudioFromYoutubeDataSource { } return CancellableResult.notSuccessful(Failure(message: e)); + } finally { + yt.close(); } - - yt.close(); - return CancellableResult.isSuccessful(downloadStreamInfo); } - Future> _downloadVideoFromYoutube(AudioOnlyStreamInfo downloadStreamInfo, - String savePath, void Function(double percent) setLoadingPercent, CancellationToken token) async { + Future _downloadVideoFromYoutubeInIsolate( + SendPort sendPort, (AudioOnlyStreamInfo, String) params, CancellationToken token) async { + final downloadStreamInfo = params.$1; + final savePath = params.$2; + + YoutubeExplode? yt; + StreamSubscription>? downloadStreamListener; + IOSink? videoFileStream; + try { - final yt = YoutubeExplode(); + yt = YoutubeExplode(); final downloadStream = yt.videos.streamsClient.get(downloadStreamInfo); final videoFile = File(savePath); @@ -153,9 +209,7 @@ class DownloadAudioFromYoutubeDataSource { } await videoFile.create(); - final videoFileStream = videoFile.openWrite(); - - late final StreamSubscription> downloadStreamListener; + videoFileStream = videoFile.openWrite(); final videoFileSize = downloadStreamInfo.size.totalBytes; int loadedBytesCount = 0; @@ -172,7 +226,7 @@ class DownloadAudioFromYoutubeDataSource { } try { - videoFileStream.add(chunk); + videoFileStream!.add(chunk); } catch (e) { if (!failureCompleter.isCompleted) { failureCompleter.complete(Failure(message: e)); @@ -180,7 +234,7 @@ class DownloadAudioFromYoutubeDataSource { } loadedBytesCount += chunk.length; - setLoadingPercent.call((loadedBytesCount / videoFileSize) * 90); + sendPort.send((loadedBytesCount / videoFileSize) * 90); }) ..onError((e) { if (!failureCompleter.isCompleted) { @@ -190,44 +244,52 @@ class DownloadAudioFromYoutubeDataSource { Failure failure = const Failure(message: ''); - var connectivitySubscription = Connectivity().onConnectivityChanged.listen((result) async { - if(result == ConnectivityResult.none || result == ConnectivityResult.other) { - if (!failureCompleter.isCompleted) { - failureCompleter.complete(const NetworkFailure()); - } - } - }); - - await Future.any([ - downloadStreamListener.asFuture(), - cancellationTokenCompleter.future, - (() async { - failure = await failureCompleter.future; - }).call(), - ]); - - await videoFileStream.flush(); - await videoFileStream.close(); - yt.close(); - - await connectivitySubscription.cancel(); + await Future.any( + [downloadStreamListener.asFuture(), cancellationTokenCompleter.future, failureCompleter.future]); if (failureCompleter.isCompleted) { - return CancellableResult.notSuccessful(failure); + sendPort.send(CancellableResult.notSuccessful(failure)); + return; } if (cancellationTokenCompleter.isCompleted) { await videoFile.delete(); - return const CancellableResult.isCancelled(); + sendPort.send(const CancellableResult.isCancelled()); + return; } - return const CancellableResult.isSuccessful(null); + sendPort.send(const CancellableResult.isSuccessful(null)); } catch (e) { - return CancellableResult.notSuccessful(Failure(message: e)); + sendPort.send(CancellableResult.notSuccessful(Failure(message: e))); + } finally { + yt?.close(); + downloadStreamListener?.cancel(); + await videoFileStream?.flush(); + await videoFileStream?.close(); } } - Future _convertFileToMp3(String rawPath, String audioPath) async { + Future _handleDownloadStream( + CancellableStream downloadVideoStream, Function(double) setLoadingPercent) async { + final downloadVideoCompleter = Completer(); + + final downloadVideoStreamSub = downloadVideoStream.stream.listen((event) { + if (event is double) { + setLoadingPercent(event); + } + + if (event is CancellableResult) { + downloadVideoCompleter.complete(event); + } + }); + + final result = await downloadVideoCompleter.future; + downloadVideoStreamSub.cancel(); + return result; + + } + + Future _convertFileToMp3(String rawPath, String audioPath) async { final audioFile = File(audioPath); if (await audioFile.exists()) { await audioFile.delete(); diff --git a/lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart b/lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart index 07ee554..959edd9 100644 --- a/lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/data_sources/network_tracks_data_source.dart @@ -181,11 +181,6 @@ class NetworkTracksDataSource { Future(() async { for (var i = 0;; i++) { - if (args.cancellationToken?.isCancelled ?? false) { - tracksGettingStream.onEnded?.call(const Result.isSuccessful(TracksDtoGettingEndedStatus.cancelled)); - return; - } - final newTracksResult = await handleSpotifyClientExceptions?>(() async { final responseTracks = await getPageTracks.call(50, i * 50 + args.offset); return Result.isSuccessful(responseTracks); diff --git a/lib/features/data_domain/tracks/network_tracks/data/models/get_tracks_args.dart b/lib/features/data_domain/tracks/network_tracks/data/models/get_tracks_args.dart index 2d767cb..cbbff6a 100644 --- a/lib/features/data_domain/tracks/network_tracks/data/models/get_tracks_args.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/models/get_tracks_args.dart @@ -1,5 +1,4 @@ import 'package:spotify/spotify.dart'; -import 'package:spotify_downloader/core/utils/cancellation_token/cancellation_token.dart'; import 'package:spotify_downloader/features/data_domain/shared/data/spotify_api_request.dart'; class GetTracksArgs { @@ -7,7 +6,6 @@ class GetTracksArgs { {required this.spotifyApiRequest, required this.spotifyId, required this.responseList, - this.cancellationToken, this.firstCallbackLength = 50, this.callbackLength = 50, this.offset = 0}); @@ -17,8 +15,6 @@ class GetTracksArgs { final String spotifyId; final List responseList; - final CancellationToken? cancellationToken; - final int firstCallbackLength; final int callbackLength; final int offset; diff --git a/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart index 66545ea..21a8d17 100644 --- a/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/repositories/network_tracks_repository_impl.dart @@ -17,12 +17,10 @@ class NetworkTracksRepositoryImpl implements NetworkTracksRepository { @override Future getTracksFromTracksCollection(GetTracksFromTracksCollectionArgs args) async { final responseList = List.empty(growable: true); - final cancellationTokenSource = CancellationTokenSource(); final getTracksArgs = GetTracksArgs( spotifyApiRequest: _spotifyRequestsConverter.convert(args.spotifyRepositoryRequest), spotifyId: args.tracksCollection.spotifyId, responseList: responseList, - cancellationToken: cancellationTokenSource.token, offset: args.offset, firstCallbackLength: 50, callbackLength: 50); diff --git a/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart b/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart index bd85987..565541f 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/download_tracks/download_tracks_cubit.dart @@ -9,6 +9,7 @@ class DownloadTracksCubit extends Cubit { final DownloadTracksRange _downloadTracksRange; final DownloadTracksFromGettingObserver _downloadTracksFromGettingObserver; final DownloadTrack _downloadTrack; + final CancelTrackLoading _cancelTrackLoading; TracksWithLoadingObserverGettingObserver? _gettingObserver; List? _trackList; @@ -17,10 +18,12 @@ class DownloadTracksCubit extends Cubit { DownloadTracksCubit( {required DownloadTracksRange downloadTracksRange, required DownloadTracksFromGettingObserver downloadTracksFromGettingObserver, - required DownloadTrack downloadTrack}) + required DownloadTrack downloadTrack, + required CancelTrackLoading cancelTrackLoading}) : _downloadTracksRange = downloadTracksRange, _downloadTracksFromGettingObserver = downloadTracksFromGettingObserver, _downloadTrack = downloadTrack, + _cancelTrackLoading = cancelTrackLoading, super(DownloadTracksInitial()); Future downloadAllTracks() async { @@ -59,6 +62,14 @@ class DownloadTracksCubit extends Cubit { trackWithLoadingObserver.loadingObserver = downloadTrackResult.result; } + Future cancelTrackLoading(TrackWithLoadingObserver trackWithLoadingObserver) async { + final canceltrackLoading = await _cancelTrackLoading.call(trackWithLoadingObserver.track); + if (!canceltrackLoading.isSuccessful) { + emit(DownloadTracksFailure(failure: canceltrackLoading.failure)); + return; + } + } + void setGettingObserver(TracksWithLoadingObserverGettingObserver? gettingObserver) { _gettingObserver = gettingObserver; } diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 22615bf..e49a88c 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -9,6 +9,7 @@ import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -139,6 +140,11 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _getTracksCollectionBloc, builder: (context, getTracksCollectionState) { + if (getTracksCollectionState is GetTracksCollectionNetworkFailure) { + return NetworkFailureSplash( + onRetryAgainButtonClicked: () => _getTracksCollectionBloc.add(GetTracksCollectionLoad())); + } + if (getTracksCollectionState is GetTracksCollectionLoaded) { return BlocBuilder( bloc: _getTracksBloc, @@ -249,7 +255,13 @@ class _DownloadTracksCollectionScreenState extends State _downloadTracksCubit + .downloadTrack(filteredTracks[index]), + onCancelButtonClicked: () => _downloadTracksCubit + .cancelTrackLoading(filteredTracks[index]), + onMoreInfoClicked: () => + showDownloadTrackInfoBottomSheet( + context, filteredTracks[index]), ); } diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart index c57cde4..09bc639 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart @@ -9,6 +9,7 @@ import 'package:spotify_downloader/core/utils/failures/failures.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; import 'package:spotify_downloader/generated/l10n.dart'; class DownloadTrackInfoStatusTile extends StatefulWidget { @@ -55,17 +56,16 @@ class _DownloadTrackInfoStatusTileState extends State { - final DownloadTrack _dowloadTrack; - final CancelTrackLoading _cancelTrackLoading; - final TrackWithLoadingObserver _trackWithLoadingObserver; - - late final StreamSubscription? _onLoadingObserverChangedSubscription; - final List _subscribedStreamControllers = List.empty(growable: true); - - TrackTileBloc({ - required TrackWithLoadingObserver trackWithLoadingObserver, - required DownloadTrack downloadTrack, - required CancelTrackLoading cancelTrackLoading, - }) : _cancelTrackLoading = cancelTrackLoading, - _trackWithLoadingObserver = trackWithLoadingObserver, - _dowloadTrack = downloadTrack, - super(selectStateBasedOnTrackWithLoadingObserver(trackWithLoadingObserver)) { - _onLoadingObserverChangedSubscription = - trackWithLoadingObserver.onLoadingTrackObserverChangedStream.listen((loadingObserver) { - add(TrackTileLoadingObserverChanged(loadingObserver)); - }); - - on((event, emit) { - _cancelTrackLoading.call(_trackWithLoadingObserver.track); - }); - - on(_onDownloadTrack); - - on(_onLoadingTrackObserverChanged); - - add(TrackTileLoadingObserverChanged(_trackWithLoadingObserver.loadingObserver)); - } - - @override - Future close() async { - await unsubscribeFromLoadingTrackObserver(); - await _onLoadingObserverChangedSubscription?.cancel(); - await super.close(); - } - - static TrackTileState selectStateBasedOnTrackWithLoadingObserver(TrackWithLoadingObserver trackWithLoadingObserver) { - if (trackWithLoadingObserver.loadingObserver != null) { - switch (trackWithLoadingObserver.loadingObserver!.status) { - case LoadingTrackStatus.waitInLoadingQueue: - return TrackTileTrackLoading(trackWithLoadingObserver); - case LoadingTrackStatus.loading: - return TrackTileTrackLoading(trackWithLoadingObserver, - percent: trackWithLoadingObserver.loadingObserver!.loadingPercent); - case LoadingTrackStatus.loaded: - return TrackTileTrackLoaded(trackWithLoadingObserver); - case LoadingTrackStatus.loadingCancelled: - return TrackTileDeffault(trackWithLoadingObserver); - case LoadingTrackStatus.failure: - return TrackTileTrackFailure(trackWithLoadingObserver, - failure: trackWithLoadingObserver.loadingObserver?.failure); - } - } - - if (trackWithLoadingObserver.track.isLoaded) { - return TrackTileTrackLoaded(trackWithLoadingObserver); - } else { - return TrackTileDeffault(trackWithLoadingObserver); - } - } - - Future _onDownloadTrack(TrackTitleDownloadTrack event, Emitter emit) async { - final loadingObserverResult = await _dowloadTrack.call(_trackWithLoadingObserver.track); - if (loadingObserverResult.isSuccessful) { - _trackWithLoadingObserver.loadingObserver = loadingObserverResult.result; - } else { - emit(TrackTileTrackFailure(_trackWithLoadingObserver, failure: loadingObserverResult.failure)); - } - } - - Future _onLoadingTrackObserverChanged( - TrackTileLoadingObserverChanged event, Emitter emit) async { - if (event.loadingTrackObserver != null) { - await unsubscribeFromLoadingTrackObserver(); - emit(selectStateBasedOnTrackWithLoadingObserver(_trackWithLoadingObserver)); - await subscribeToLoadingTrackObserver(event.loadingTrackObserver!, emit); - } else { - if (_trackWithLoadingObserver.track.isLoaded) { - emit(TrackTileTrackLoaded(_trackWithLoadingObserver)); - } else { - emit(TrackTileDeffault(_trackWithLoadingObserver)); - } - } - } - - Future subscribeToLoadingTrackObserver( - LoadingTrackObserver loadingTrackObserver, Emitter emit) async { - await Future.wait([ - emit.forEach(_subscribeToStream(loadingTrackObserver.startLoadingStream), - onData: (string) => TrackTileTrackLoading(_trackWithLoadingObserver, percent: null)), - emit.forEach(_subscribeToStream(loadingTrackObserver.loadingPercentChangedStream), - onData: (percent) => TrackTileTrackLoading(_trackWithLoadingObserver, percent: percent)), - emit.forEach(_subscribeToStream(loadingTrackObserver.loadedStream), - onData: (savePath) => TrackTileTrackLoaded(_trackWithLoadingObserver)), - emit.forEach(_subscribeToStream(loadingTrackObserver.loadingFailureStream), - onData: (failure) => TrackTileTrackFailure(_trackWithLoadingObserver, failure: failure)), - emit.forEach(_subscribeToStream(loadingTrackObserver.loadingCancelledStream), - onData: (_) => TrackTileDeffault(_trackWithLoadingObserver)) - ]); - } - - Stream _subscribeToStream(Stream stream) { - final subscribedStreamController = StreamController(); - final streamSub = stream.listen((event) { - subscribedStreamController.add(event); - }); - subscribedStreamController.onCancel = () => streamSub.cancel(); - _subscribedStreamControllers.add(subscribedStreamController); - return subscribedStreamController.stream; - } - - Future unsubscribeFromLoadingTrackObserver() async { - for (var subscription in _subscribedStreamControllers) { - await subscription.close(); - } - } -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_event.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_event.dart deleted file mode 100644 index b3f562e..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_event.dart +++ /dev/null @@ -1,21 +0,0 @@ -part of 'track_tile_bloc.dart'; - -sealed class TrackTileEvent extends Equatable { - const TrackTileEvent(); - - @override - List get props => []; -} - -final class TrackTitleDownloadTrack extends TrackTileEvent {} - -final class TrackTileCancelTrackLoading extends TrackTileEvent {} - -final class TrackTileLoadingObserverChanged extends TrackTileEvent { - const TrackTileLoadingObserverChanged(this.loadingTrackObserver); - - final LoadingTrackObserver? loadingTrackObserver; - - @override - List get props => [loadingTrackObserver]; -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_state.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_state.dart deleted file mode 100644 index b08851e..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_state.dart +++ /dev/null @@ -1,37 +0,0 @@ -part of 'track_tile_bloc.dart'; - -sealed class TrackTileState extends Equatable { - const TrackTileState(this.trackWithLoadingObserver); - - final TrackWithLoadingObserver trackWithLoadingObserver; - Track get track => trackWithLoadingObserver.track; - - @override - List get props => []; -} - -final class TrackTileDeffault extends TrackTileState { - const TrackTileDeffault(super.trackWithLoadingObserver); -} - -final class TrackTileTrackLoading extends TrackTileState { - final double? percent; - - const TrackTileTrackLoading(super.trackWithLoadingObserver, {this.percent}); - - @override - List get props => [track, percent]; -} - -final class TrackTileTrackLoaded extends TrackTileState { - const TrackTileTrackLoaded(super.trackWithLoadingObserver); -} - -final class TrackTileTrackFailure extends TrackTileState { - final Failure? failure; - - const TrackTileTrackFailure(super.trackWithLoadingObserver, {this.failure}); - - @override - List get props => [track, failure]; -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart new file mode 100644 index 0000000..282cc3a --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart @@ -0,0 +1,84 @@ +import 'dart:async'; + +import 'package:async/async.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; + +part 'track_tile_state.dart'; + +class TrackTileCubit extends Cubit { + TrackWithLoadingObserver? _trackWithLoadingObserver; + + StreamSubscription? _loadingObserverSubscription; + StreamSubscription? _loadingObserverChangedSubscription; + + TrackTileCubit() : super(TrackTileDeffault()); + + Future changeTrackWithLoadingObserver(TrackWithLoadingObserver trackWithLoadingObserver) async { + _trackWithLoadingObserver = trackWithLoadingObserver; + + _loadingObserverChangedSubscription?.cancel(); + _loadingObserverChangedSubscription = + _trackWithLoadingObserver?.onLoadingTrackObserverChangedStream.listen(_onLoadingObserverChanged); + + _onLoadingObserverChanged(trackWithLoadingObserver.loadingObserver); + } + + void _onLoadingObserverChanged(LoadingTrackObserver? newLoadingObserver) { + _unsubscribeFromLoadingObserver(); + _subscribeToLoadingObserver(newLoadingObserver); + _onLoadingObserverEvent(); + } + + void _unsubscribeFromLoadingObserver() { + _loadingObserverSubscription?.cancel(); + _loadingObserverSubscription = null; + } + + void _subscribeToLoadingObserver(LoadingTrackObserver? loadingTrackObserver) { + if (loadingTrackObserver == null) return; + _loadingObserverSubscription = StreamGroup.merge([ + loadingTrackObserver.startLoadingStream, + loadingTrackObserver.loadingPercentChangedStream, + loadingTrackObserver.loadedStream, + loadingTrackObserver.loadingFailureStream, + loadingTrackObserver.loadingCancelledStream + ]).listen((event) => _onLoadingObserverEvent()); + } + + void _onLoadingObserverEvent() { + if (_trackWithLoadingObserver == null) return; + + final status = _trackWithLoadingObserver!.loadingObserver?.status; + if (status == null) { + if (_trackWithLoadingObserver!.track.isLoaded) { + emit(TrackTileLoaded()); + } else { + emit(TrackTileDeffault()); + } + + return; + } + + if (status == LoadingTrackStatus.loading || status == LoadingTrackStatus.waitInLoadingQueue) { + emit(TrackTileLoading(percent: _trackWithLoadingObserver!.loadingObserver!.loadingPercent)); + return; + } + + if (status == LoadingTrackStatus.failure) { + emit(TrackTileFailure()); + return; + } + + if (status == LoadingTrackStatus.loadingCancelled) { + emit(TrackTileDeffault()); + return; + } + + if (status == LoadingTrackStatus.loaded) { + emit(TrackTileLoaded()); + } + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart new file mode 100644 index 0000000..2aa9447 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart @@ -0,0 +1,23 @@ +part of 'track_tile_cubit.dart'; + +sealed class TrackTileState extends Equatable { + const TrackTileState(); + + @override + List get props => []; +} + +final class TrackTileDeffault extends TrackTileState {} + +final class TrackTileFailure extends TrackTileState {} + +final class TrackTileLoading extends TrackTileState { + const TrackTileLoading({required this.percent}); + + final double? percent; + + @override + List get props => [percent]; +} + +final class TrackTileLoaded extends TrackTileState {} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart index 9756a6d..e6411bf 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile.dart @@ -1,199 +1,72 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; -import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/bloc/track_tile_bloc.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart'; -class TrackTile extends StatefulWidget { - const TrackTile({super.key, required this.trackWithLoadingObserver}); +class TrackTile extends StatelessWidget { + const TrackTile( + {super.key, + required this.trackWithLoadingObserver, + this.onDownloadButtonClicked, + this.onCancelButtonClicked, + this.onMoreInfoClicked}); final TrackWithLoadingObserver trackWithLoadingObserver; - - @override - State createState() => _TrackTileState(); -} - -class _TrackTileState extends State { - late final TrackTileBloc _trackTileBloc; - - @override - void initState() { - _trackTileBloc = injector.get(param1: widget.trackWithLoadingObserver); - super.initState(); - } - - @override - void dispose() { - _trackTileBloc.close(); - super.dispose(); - } + final void Function()? onDownloadButtonClicked; + final void Function()? onCancelButtonClicked; + final void Function()? onMoreInfoClicked; @override Widget build(BuildContext context) { final theme = Theme.of(context); - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: BlocBuilder( - bloc: _trackTileBloc, - builder: (context, state) { - return Row( - children: [ - CachedNetworkImage( - width: 50, - height: 50, - imageUrl: state.track.album?.imageUrl ?? '', - placeholder: (context, imageUrl) => - Image.asset('resources/images/another/loading_track_collection_image.png'), - errorWidget: (context, imageUrl, _) => - Image.asset('resources/images/another/loading_track_collection_image.png'), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - state.track.name, - style: theme.textTheme.bodyMedium, - ), - Text( - state.track.artists?.join(', ') ?? '', - style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor), - ) - ], - ), - )), - ], - ); - }, - ), + return Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ + CachedNetworkImage( + width: 50, + height: 50, + fit: BoxFit.fitWidth, + memCacheHeight: (50 * MediaQuery.of(context).devicePixelRatio).round(), + imageUrl: trackWithLoadingObserver.track.album?.imageUrl ?? '', + placeholder: (context, imageUrl) => Image.asset('resources/images/another/loading_track_collection_image.png'), + errorWidget: (context, imageUrl, _) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + trackWithLoadingObserver.track.name, + style: theme.textTheme.bodyMedium, + ), + Text( + trackWithLoadingObserver.track.artists?.join(', ') ?? '', + style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor), + ) + ], ), - Padding( - padding: const EdgeInsets.only(left: 20, right: 5), - child: Row( - children: [ - Container( - alignment: Alignment.center, - width: 50, - padding: const EdgeInsets.only(right: 10), - child: BlocBuilder( - bloc: _trackTileBloc, - builder: (context, state) { - if (state is TrackTileTrackLoading) { - return GestureDetector( - onTap: () { - _trackTileBloc.add(TrackTileCancelTrackLoading()); - }, - child: SvgPicture.asset( - 'resources/images/svg/track_tile/cancel_icon.svg', - height: 28, - width: 28, - ), - ); - } - - if (state is TrackTileTrackFailure) { - return GestureDetector( - onTap: () {}, - child: SvgPicture.asset( - 'resources/images/svg/track_tile/error_icon.svg', - height: 32, - width: 32, - colorFilter: const ColorFilter.mode(errorPrimaryColor, BlendMode.srcIn), - ), - ); - } - - return Container(); - }, - ), - ), - Container( - alignment: Alignment.center, - width: 50, - child: BlocBuilder( - bloc: _trackTileBloc, - builder: (context, state) { - if (state is TrackTileDeffault) { - return GestureDetector( - onTap: () { - _trackTileBloc.add(TrackTitleDownloadTrack()); - }, - child: SvgPicture.asset('resources/images/svg/track_tile/download_icon.svg', - height: 35, width: 35)); - } - - if (state is TrackTileTrackLoading) { - return Container( - padding: const EdgeInsets.all(0), - height: 32, - width: 32, - child: CircularProgressIndicator( - strokeWidth: 4, - color: primaryColor, - value: (() { - if (state.percent != null) { - return state.percent! / 100; - } - - return null; - }).call(), - ), - ); - } - - if (state is TrackTileTrackLoaded) { - return SvgPicture.asset( - 'resources/images/svg/track_tile/downloaded_icon.svg', - height: 35, - width: 35, - colorFilter: const ColorFilter.mode(primaryColor, BlendMode.srcIn), - ); - } - - if (state is TrackTileTrackFailure) { - return GestureDetector( - onTap: () => _trackTileBloc.add(TrackTitleDownloadTrack()), - child: SvgPicture.asset( - 'resources/images/svg/track_tile/reload_icon.svg', - height: 32, - width: 32, - ), - ); - } - - return Container(); - }, - ), - ), - ], - ), - ), - BlocBuilder( - bloc: _trackTileBloc, - builder: (context, state) { - return SizedBox( - width: 30, - height: 50, - child: IconButton( - onPressed: () { - showDownloadTrackInfoBottomSheet(context, state.trackWithLoadingObserver); - }, - icon: SvgPicture.asset( - 'resources/images/svg/track_tile/more_info.svg', - fit: BoxFit.fitHeight, - ))); - }, - ) - ], - ); + )), + TrackTileStatusButton( + trackWithLoadingObserver: trackWithLoadingObserver, + onCancelButtonClicked: onCancelButtonClicked, + onDownloadButtonClicked: onDownloadButtonClicked + ), + SizedBox( + width: 30, + height: 50, + child: IconButton( + onPressed: () { + onMoreInfoClicked?.call(); + }, + icon: SvgPicture.asset( + 'resources/images/svg/track_tile/more_info.svg', + fit: BoxFit.fitHeight, + ))) + ]); } } + diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart new file mode 100644 index 0000000..45cebb5 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart @@ -0,0 +1,155 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/core/di/injector.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; + +class TrackTileStatusButton extends StatefulWidget { + const TrackTileStatusButton( + {super.key, required this.trackWithLoadingObserver, this.onDownloadButtonClicked, this.onCancelButtonClicked}); + + final TrackWithLoadingObserver trackWithLoadingObserver; + final void Function()? onDownloadButtonClicked; + final void Function()? onCancelButtonClicked; + + @override + State createState() => _TrackTileStatusButtonState(); +} + +class _TrackTileStatusButtonState extends State { + final _trackTileCubit = injector.get(); + + @override + void initState() { + _trackTileCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); + super.initState(); + } + + @override + void didUpdateWidget(covariant TrackTileStatusButton oldWidget) { + if (oldWidget.trackWithLoadingObserver != widget.trackWithLoadingObserver) { + _trackTileCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); + } + super.didUpdateWidget(oldWidget); + } + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.only(left: 20, right: 5), + child: Row( + children: [ + Container( + alignment: Alignment.center, + width: 50, + padding: const EdgeInsets.only(right: 10), + child: BlocBuilder( + bloc: _trackTileCubit, + builder: (context, state) { + if (state is TrackTileLoading) { + return GestureDetector( + onTap: () { + widget.onCancelButtonClicked?.call(); + }, + child: SvgPicture.asset( + 'resources/images/svg/track_tile/cancel_icon.svg', + height: 28, + width: 28, + ), + ); + } + + if (state is TrackTileFailure) { + return GestureDetector( + onTap: () {}, + child: SvgPicture.asset( + 'resources/images/svg/track_tile/error_icon.svg', + height: 32, + width: 32, + ), + ); + } + + return Container(); + }, + ), + ), + Container( + alignment: Alignment.center, + width: 50, + child: BlocBuilder( + bloc: _trackTileCubit, + builder: (context, state) { + if (state is TrackTileDeffault) { + return GestureDetector( + onTap: () { + widget.onDownloadButtonClicked?.call(); + }, + child: SvgPicture.asset('resources/images/svg/track_tile/download_icon.svg', + height: 35, width: 35)); + } + + if (state is TrackTileLoading) { + if (state.percent == null) { + return Container( + padding: const EdgeInsets.all(0), + height: 32, + width: 32, + child: + const StrangeOptimizedCircularProgressIndicator(strokeWidth: 4, color: primaryColor)); + } + + return Container( + padding: const EdgeInsets.all(0), + height: 32, + width: 32, + child: CircularProgressIndicator( + strokeWidth: 4, + color: primaryColor, + value: (() { + if (state.percent != null) { + return state.percent! / 100; + } + + return null; + }).call(), + ), + ); + } + + if (state is TrackTileLoaded) { + return SvgPicture.asset( + 'resources/images/svg/track_tile/downloaded_icon.svg', + height: 35, + width: 35 + ); + } + + if (state is TrackTileFailure) { + return GestureDetector( + onTap: () => widget.onDownloadButtonClicked?.call(), + child: SvgPicture.asset( + 'resources/images/svg/track_tile/reload_icon.svg', + height: 32, + width: 32, + ), + ); + } + + return Container(); + }, + ), + ), + ], + ), + ) + ], + ); + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/widgets/strange_optimized_circular_progress_indicator.dart b/lib/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart similarity index 100% rename from lib/features/presentation/download_tracks_collection/widgets/track_tile/widgets/strange_optimized_circular_progress_indicator.dart rename to lib/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart diff --git a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart index 586bf6b..57c1c74 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/bloc/tracks_collections_loading_notifications_bloc.dart @@ -64,7 +64,8 @@ class TracksCollectionsLoadingNotificationsBloc } } - FutureOr _onUpdate(event, emit) { + Future _onUpdate(TracksCollectionsLoadingNotificationsUpdate event, + Emitter emit) async { List loadingTracksCollectionsNames = List.empty(growable: true); int totalTracks = 0; int loadingTracks = 0; diff --git a/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart b/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart index 0df77ee..eee8d36 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart @@ -37,22 +37,12 @@ class TracksCollectionsLoadingNotificationsSender { } void _sendNotification(TracksCollectionsLoadingInfo info) { - int progress = min(((info.totalTracks - info.loadingTracks) / info.totalTracks * 100).floor(), 100); - if (info.loadingTracks != 0) { - AwesomeNotifications().createNotification( - content: NotificationContent( - id: messageId, - channelKey: mainChannelKey, - actionType: ActionType.Default, - title: S.current.tracksAreBeingLoaded, - backgroundColor: primaryColor, - body: S.current - .tracksAreBeingLoadedBody(info.totalTracks, info.loadedTracks, info.failuredTracks, progress), - summary: '^_^', - locked: true, - notificationLayout: NotificationLayout.ProgressBar, - progress: progress)); - } else { + if (info.totalTracks == 0) { + AwesomeNotifications().cancel(messageId); + return; + } + + if (info.loadingTracks == 0) { AwesomeNotifications().createNotification( content: NotificationContent( id: messageId, @@ -62,8 +52,27 @@ class TracksCollectionsLoadingNotificationsSender { backgroundColor: primaryColor, body: S.current.allTracksAreLoadedBody(info.loadedTracks, info.failuredTracks), summary: '^_^', - notificationLayout: NotificationLayout.Default)); + notificationLayout: NotificationLayout.Default, + autoDismissible: false)); + return; } + + int progress = min(((info.totalTracks - info.loadingTracks) / info.totalTracks * 100).floor(), 100); + + AwesomeNotifications().createNotification( + content: NotificationContent( + id: messageId, + channelKey: mainChannelKey, + actionType: ActionType.SilentAction, + title: S.current.tracksAreBeingLoaded, + backgroundColor: primaryColor, + body: + S.current.tracksAreBeingLoadedBody(info.totalTracks, info.loadedTracks, info.failuredTracks, progress), + summary: '^_^', + autoDismissible: false, + notificationLayout: NotificationLayout.ProgressBar, + progress: progress == 0 ? null : progress)); + } void _startDelayedUpdate() { From aa170a2ed69cfac9e681386e3ea5cce8a74c9f70 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Fri, 28 Jun 2024 18:44:10 +1000 Subject: [PATCH 15/41] Fixed some botom sheet issues --- lib/core/app/themes/themes.dart | 24 ++-- lib/core/di/injector.dart | 15 +-- .../bloc/download_track_info_bloc.dart | 35 ------ .../bloc/download_track_info_event.dart | 18 --- .../bloc/download_track_info_state.dart | 14 --- .../cubit/download_track_info_cubit.dart | 30 +++++ .../cubit/download_track_info_state.dart | 8 ++ .../view/download_track_info.dart | 75 ++++++------ ...download_track_info_status_tile_cubit.dart | 87 ------------- ...download_track_info_status_tile_state.dart | 34 ------ .../view/download_track_info_status_tile.dart | 115 +++++++++++------- .../widgets/download_track_info_tile.dart | 2 +- ...ownload_track_info_status_tile_cubit.dart} | 24 ++-- ...download_track_info_status_tile_state.dart | 34 ++++++ .../track_tile/cubit/track_tile_state.dart | 23 ---- .../view/track_tile_status_button.dart | 28 ++--- .../widgets/tracks_collection_manage_bar.dart | 2 +- .../presentation/main/view/main_screen.dart | 2 + .../view/language_setting.dart | 8 +- lib/generated/intl/messages_en.dart | 1 + lib/generated/intl/messages_ru.dart | 2 + lib/generated/l10n.dart | 10 ++ lib/l10n/intl_en.arb | 3 +- lib/l10n/intl_ru.arb | 3 +- pubspec.lock | 68 ++++++++--- pubspec.yaml | 4 +- .../images/svg/track_tile/error_icon.svg | 2 +- 27 files changed, 304 insertions(+), 367 deletions(-) delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_event.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_state.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_state.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_state.dart rename lib/features/presentation/download_tracks_collection/widgets/{track_tile/cubit/track_tile_cubit.dart => shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart} (71%) create mode 100644 lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_state.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart diff --git a/lib/core/app/themes/themes.dart b/lib/core/app/themes/themes.dart index 7724367..4b2908d 100644 --- a/lib/core/app/themes/themes.dart +++ b/lib/core/app/themes/themes.dart @@ -8,34 +8,34 @@ final mainTheme = ThemeData( cardTheme: const CardTheme(color: surfaceColor), scrollbarTheme: ScrollbarThemeData( interactive: true, - thumbVisibility: const MaterialStatePropertyAll(true), + thumbVisibility: const WidgetStatePropertyAll(true), radius: const Radius.circular(10), crossAxisMargin: 5, mainAxisMargin: 5, - thumbColor: MaterialStateProperty.resolveWith((states) { - if (states.contains(MaterialState.dragged)) { + thumbColor: WidgetStateProperty.resolveWith((states) { + if (states.contains(WidgetState.dragged)) { return primaryColor; } else { return onBackgroundSecondaryColor; } })), switchTheme: SwitchThemeData( - trackColor: MaterialStateProperty.resolveWith((states) { - if (!states.contains(MaterialState.selected)) { + trackColor: WidgetStateProperty.resolveWith((states) { + if (!states.contains(WidgetState.selected)) { return onBackgroundSecondaryColor; } else { return null; } }), - thumbColor: MaterialStateProperty.resolveWith((states) { - if (!states.contains(MaterialState.selected)) { + thumbColor: WidgetStateProperty.resolveWith((states) { + if (!states.contains(WidgetState.selected)) { return onBackgroundThirdRateColor; } else { return null; } }), - trackOutlineColor: MaterialStateProperty.resolveWith((states) { - if (!states.contains(MaterialState.selected)) { + trackOutlineColor: WidgetStateProperty.resolveWith((states) { + if (!states.contains(WidgetState.selected)) { return onBackgroundThirdRateColor; } else { return Colors.transparent; @@ -60,9 +60,9 @@ final mainTheme = ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: primaryColor), elevatedButtonTheme: const ElevatedButtonThemeData( style: ButtonStyle( - backgroundColor: MaterialStatePropertyAll(primaryColor), - textStyle: MaterialStatePropertyAll(TextStyle()), - foregroundColor: MaterialStatePropertyAll(onPrimaryColor))), + backgroundColor: WidgetStatePropertyAll(primaryColor), + textStyle: WidgetStatePropertyAll(TextStyle()), + foregroundColor: WidgetStatePropertyAll(onPrimaryColor))), textTheme: const TextTheme( titleLarge: _titleLarge, titleMedium: _titleMedium, diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index bcae163..3381f9f 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -21,9 +21,8 @@ import 'package:spotify_downloader/features/data_domain/tracks_collections/histo import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; @@ -209,12 +208,10 @@ void _provideBlocs() { cancelTrackLoading: injector.get())); injector.registerFactory(() => FilterTracksBloc()); - injector.registerFactory(() => TrackTileCubit()); - injector.registerFactoryParam((trackwithLoadingObserver, _) => - DownloadTrackInfoBloc( - trackWithLoadingObserver: trackwithLoadingObserver, cancelTrackLoading: injector.get())); - injector.registerFactoryParam( - (trackwithLoadingObserver, _) => DownloadTrackInfoStatusTileCubit(trackwithLoadingObserver)); + injector.registerFactory( + () => DownloadTrackInfoCubit(cancelTrackLoading: injector.get())); + injector.registerFactory( + () => TrackLoadingObservingCubit()); injector.registerFactoryParam((track, _) => ChangeSourceVideoBloc( sourceTrack: track, find10VideosByTrack: injector.get(), diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart deleted file mode 100644 index 4363ddd..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; - - -part 'download_track_info_event.dart'; -part 'download_track_info_state.dart'; - -class DownloadTrackInfoBloc extends Bloc { - final CancelTrackLoading _cancelTrackLoading; - final TrackWithLoadingObserver _trackWithLoadingObserver; - - DownloadTrackInfoBloc( - {required TrackWithLoadingObserver trackWithLoadingObserver, required CancelTrackLoading cancelTrackLoading}) - : _trackWithLoadingObserver = trackWithLoadingObserver, - _cancelTrackLoading = cancelTrackLoading, - super(DownloadTrackInfoLoaded(trackWithLoadingObserver: trackWithLoadingObserver)) { - on((event, emit) async { - if (trackWithLoadingObserver.track.youtubeUrl == event.youtubeUrl) return; - - _trackWithLoadingObserver.track.isLoaded = false; - _trackWithLoadingObserver.track.youtubeUrl = event.youtubeUrl; - - if (_trackWithLoadingObserver.loadingObserver != null && - (_trackWithLoadingObserver.loadingObserver!.status == LoadingTrackStatus.waitInLoadingQueue || - _trackWithLoadingObserver.loadingObserver!.status == LoadingTrackStatus.loading)) { - await _cancelTrackLoading.call(_trackWithLoadingObserver.track); - } else { - _trackWithLoadingObserver.loadingObserver = null; - return; - } - }); - } -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_event.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_event.dart deleted file mode 100644 index 93036b4..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_event.dart +++ /dev/null @@ -1,18 +0,0 @@ -part of 'download_track_info_bloc.dart'; - -sealed class DownloadTrackInfoEvent extends Equatable { - const DownloadTrackInfoEvent(); - - @override - List get props => []; -} - -final class DownloadTrackInfoChangeYoutubeUrl extends DownloadTrackInfoEvent { - const DownloadTrackInfoChangeYoutubeUrl({required this.youtubeUrl}); - - final String youtubeUrl; - - @override - List get props => [youtubeUrl]; -} - \ No newline at end of file diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_state.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_state.dart deleted file mode 100644 index 04bf4c2..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_state.dart +++ /dev/null @@ -1,14 +0,0 @@ -part of 'download_track_info_bloc.dart'; - -sealed class DownloadTrackInfoState extends Equatable { - const DownloadTrackInfoState({required this.trackWithLoadingObserver}); - - final TrackWithLoadingObserver trackWithLoadingObserver; - - @override - List get props => [trackWithLoadingObserver]; -} - -final class DownloadTrackInfoLoaded extends DownloadTrackInfoState { - const DownloadTrackInfoLoaded({required super.trackWithLoadingObserver}); -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart new file mode 100644 index 0000000..24b96d4 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart @@ -0,0 +1,30 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; + +part 'download_track_info_state.dart'; + +class DownloadTrackInfoCubit extends Cubit { + final CancelTrackLoading _cancelTrackLoading; + + DownloadTrackInfoCubit({required CancelTrackLoading cancelTrackLoading}) + : _cancelTrackLoading = cancelTrackLoading, + super(DownloadTrackInfoDefault()); + + void changeTrackYoutubeUrl({required TrackWithLoadingObserver trackWithLoadingObserver, required String newYoutubeUrl}) { + if (trackWithLoadingObserver.track.youtubeUrl == newYoutubeUrl) return; + + trackWithLoadingObserver.track.isLoaded = false; + trackWithLoadingObserver.track.youtubeUrl = newYoutubeUrl; + + if (trackWithLoadingObserver.loadingObserver != null && + (trackWithLoadingObserver.loadingObserver!.status == LoadingTrackStatus.waitInLoadingQueue || + trackWithLoadingObserver.loadingObserver!.status == LoadingTrackStatus.loading)) { + _cancelTrackLoading.call(trackWithLoadingObserver.track); + } else { + trackWithLoadingObserver.loadingObserver = null; + return; + } + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_state.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_state.dart new file mode 100644 index 0000000..f0062d0 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_state.dart @@ -0,0 +1,8 @@ +part of 'download_track_info_cubit.dart'; + +sealed class DownloadTrackInfoState extends Equatable { + @override + List get props => []; +} + +final class DownloadTrackInfoDefault extends DownloadTrackInfoState {} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart index 97a7bfa..7cc4776 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart @@ -2,23 +2,29 @@ import 'package:auto_route/auto_route.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/bloc/download_track_info_bloc.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; import 'package:spotify_downloader/generated/l10n.dart'; void showDownloadTrackInfoBottomSheet(BuildContext context, TrackWithLoadingObserver trackWithLoadingObserver) { - showModalBottomSheet( + showMaterialModalBottomSheet( elevation: 0, backgroundColor: surfaceColor, context: context, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(25.0), + ), + ), + bounce: true, builder: (buildContext) { return DownloadTrackInfo( trackWithLoadingObserver: trackWithLoadingObserver, @@ -36,27 +42,20 @@ class DownloadTrackInfo extends StatefulWidget { } class _DownloadTrackInfoState extends State { - late final DownloadTrackInfoBloc _downloadTrackInfoBloc; - - @override - void initState() { - super.initState(); - _downloadTrackInfoBloc = injector.get(param1: widget.trackWithLoadingObserver); - } + late final DownloadTrackInfoCubit _downloadTrackInfoCubit = injector.get(); @override Widget build(BuildContext context) { + final track = widget.trackWithLoadingObserver.track; + final theme = Theme.of(context); - return SizedBox( - height: 290, - child: Scaffold( - backgroundColor: Colors.transparent, - body: Padding( - padding: const EdgeInsets.only(bottom: 10), - child: BlocBuilder( - bloc: _downloadTrackInfoBloc, - builder: (context, state) { - return Column(mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, children: [ + + return Stack( + children: [ + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only(bottom: 10), + child: Column(mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, children: [ Container( padding: const EdgeInsets.only(top: 15, bottom: 20), child: Container( @@ -73,7 +72,9 @@ class _DownloadTrackInfoState extends State { CachedNetworkImage( width: 50, height: 50, - imageUrl: state.trackWithLoadingObserver.track.album?.imageUrl ?? '', + fit: BoxFit.fitWidth, + memCacheWidth: (50 * MediaQuery.of(context).devicePixelRatio).round(), + imageUrl: track.album?.imageUrl ?? '', placeholder: (context, imageUrl) => Image.asset('resources/images/another/loading_track_collection_image.png'), errorWidget: (context, imageUrl, _) => @@ -86,7 +87,7 @@ class _DownloadTrackInfoState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - state.trackWithLoadingObserver.track.name, + track.name, style: theme.textTheme.bodyMedium, ), LayoutBuilder(builder: (context, constrains) { @@ -94,7 +95,7 @@ class _DownloadTrackInfoState extends State { Container( constraints: BoxConstraints(maxWidth: constrains.maxWidth / 2), child: Text( - state.trackWithLoadingObserver.track.artists?.join(', ') ?? '', + track.artists?.join(', ') ?? '', style: theme.textTheme.labelLarge?.copyWith(color: onSurfaceSecondaryColor), ), ), @@ -111,7 +112,7 @@ class _DownloadTrackInfoState extends State { ), Expanded( child: Text( - state.trackWithLoadingObserver.track.album?.name ?? '', + track.album?.name ?? '', style: theme.textTheme.labelLarge?.copyWith(color: onSurfaceSecondaryColor), ), ), @@ -123,7 +124,7 @@ class _DownloadTrackInfoState extends State { ], )), const Divider(color: onSurfaceSecondaryColor, height: 20, thickness: 0.3), - DownloadTrackInfoStatusTile(trackWithLoadingObserver: state.trackWithLoadingObserver), + DownloadTrackInfoStatusTile(trackWithLoadingObserver: widget.trackWithLoadingObserver), DownloadTrackInfoTile( title: S.of(context).linkToTheSource, iconWidget: SvgPicture.asset('resources/images/svg/download_track_info/reference_icon.svg', @@ -131,9 +132,9 @@ class _DownloadTrackInfoState extends State { width: 23, colorFilter: const ColorFilter.mode(onSurfaceSecondaryColor, BlendMode.srcIn)), onTap: () async { - if (state.trackWithLoadingObserver.track.youtubeUrl != null) { + if (track.youtubeUrl != null) { showSnackBar(S.of(context).urlCopied, context); - await Clipboard.setData(ClipboardData(text: state.trackWithLoadingObserver.track.youtubeUrl!)); + await Clipboard.setData(ClipboardData(text: track.youtubeUrl!)); } else { showSnackBar(S.of(context).urlNotSelected, context); } @@ -145,18 +146,24 @@ class _DownloadTrackInfoState extends State { width: 23, colorFilter: const ColorFilter.mode(onSurfaceSecondaryColor, BlendMode.srcIn)), onTap: () async { - final changedUrl = await AutoRouter.of(context) - .push(ChangeSourceVideoRoute(track: state.trackWithLoadingObserver.track)); + final changedUrl = + await AutoRouter.of(context).push(ChangeSourceVideoRoute(track: track)); if (changedUrl != null) { - _downloadTrackInfoBloc.add(DownloadTrackInfoChangeYoutubeUrl(youtubeUrl: changedUrl)); + _downloadTrackInfoCubit.changeTrackYoutubeUrl( + trackWithLoadingObserver: widget.trackWithLoadingObserver, newYoutubeUrl: changedUrl); } }, - ), - ]); - }, + ) + ])), + ), + const Positioned.fill( + child: IgnorePointer( + child: Scaffold( + backgroundColor: Colors.transparent, + ), ), ), - ), + ], ); } diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart deleted file mode 100644 index 93ed558..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'dart:async'; - -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/failures/failure.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; - -part 'download_track_info_status_tile_state.dart'; - -class DownloadTrackInfoStatusTileCubit extends Cubit { - final TrackWithLoadingObserver _trackWithLoadingObserver; - final List _loadingTrackObserverSubscriptions = List.empty(growable: true); - StreamSubscription? _loadingTrackObserverChangedSubscription; - - DownloadTrackInfoStatusTileCubit(TrackWithLoadingObserver trackWithLoadingObserver) - : _trackWithLoadingObserver = trackWithLoadingObserver, - super(_selectStateBasedOnLoadingObserver(trackWithLoadingObserver)) { - _loadingTrackObserverChangedSubscription = - _trackWithLoadingObserver.onLoadingTrackObserverChangedStream.listen((loadingObserver) async { - await unsubscribeFromLoadingTrackObserver(); - emit(_selectStateBasedOnLoadingObserver(_trackWithLoadingObserver)); - if (_trackWithLoadingObserver.loadingObserver != null) { - subscribeToLoadingTrackObserver(_trackWithLoadingObserver.loadingObserver!); - } - }); - - if (_trackWithLoadingObserver.loadingObserver != null) { - subscribeToLoadingTrackObserver(_trackWithLoadingObserver.loadingObserver!); - } - } - - @override - Future close() async { - await unsubscribeFromLoadingTrackObserver(); - await _loadingTrackObserverChangedSubscription?.cancel(); - return super.close(); - } - - void subscribeToLoadingTrackObserver(LoadingTrackObserver loadingTrackObserver) { - if ((loadingTrackObserver.status == LoadingTrackStatus.waitInLoadingQueue || - loadingTrackObserver.status == LoadingTrackStatus.loading)) { - final sub1 = loadingTrackObserver.loadingPercentChangedStream - .listen((percent) => emit(DownloadTrackInfoStatusTileLoading(percent: percent))); - final sub2 = loadingTrackObserver.loadingCancelledStream - .listen((event) => emit(const DownloadTrackInfoStatusTileDeffault())); - final sub3 = loadingTrackObserver.loadingFailureStream - .listen((failure) => emit(DownloadTrackInfoStatusTileFailure(failure: failure))); - final sub4 = - loadingTrackObserver.loadedStream.listen((event) => emit(const DownloadTrackInfoStatusTileLoaded())); - - _loadingTrackObserverSubscriptions.addAll([sub1, sub2, sub3, sub4]); - } - } - - Future unsubscribeFromLoadingTrackObserver() async { - for (var loadingTrackObserverSubscription in _loadingTrackObserverSubscriptions) { - await loadingTrackObserverSubscription.cancel(); - } - _loadingTrackObserverSubscriptions.clear(); - } - - static DownloadTrackInfoStatusTileState _selectStateBasedOnLoadingObserver( - TrackWithLoadingObserver trackWithLoadingObserver) { - if (trackWithLoadingObserver.loadingObserver == null) { - if (trackWithLoadingObserver.track.isLoaded) { - return const DownloadTrackInfoStatusTileLoaded(); - } else { - return const DownloadTrackInfoStatusTileDeffault(); - } - } else { - switch (trackWithLoadingObserver.loadingObserver!.status) { - case LoadingTrackStatus.waitInLoadingQueue: - return const DownloadTrackInfoStatusTileLoading(percent: null); - case LoadingTrackStatus.loading: - return DownloadTrackInfoStatusTileLoading(percent: trackWithLoadingObserver.loadingObserver!.loadingPercent); - case LoadingTrackStatus.loaded: - return const DownloadTrackInfoStatusTileLoaded(); - case LoadingTrackStatus.loadingCancelled: - return const DownloadTrackInfoStatusTileDeffault(); - case LoadingTrackStatus.failure: - return DownloadTrackInfoStatusTileFailure(failure: trackWithLoadingObserver.loadingObserver!.failure); - } - } - } -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_state.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_state.dart deleted file mode 100644 index a1a10eb..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_state.dart +++ /dev/null @@ -1,34 +0,0 @@ -part of 'download_track_info_status_tile_cubit.dart'; - -sealed class DownloadTrackInfoStatusTileState extends Equatable { - const DownloadTrackInfoStatusTileState(); - - @override - List get props => []; -} - -final class DownloadTrackInfoStatusTileDeffault extends DownloadTrackInfoStatusTileState { - const DownloadTrackInfoStatusTileDeffault(); -} - -final class DownloadTrackInfoStatusTileLoading extends DownloadTrackInfoStatusTileState { - const DownloadTrackInfoStatusTileLoading({required this.percent}); - - final double? percent; - - @override - List get props => [percent]; -} - -final class DownloadTrackInfoStatusTileLoaded extends DownloadTrackInfoStatusTileState { - const DownloadTrackInfoStatusTileLoaded(); -} - -final class DownloadTrackInfoStatusTileFailure extends DownloadTrackInfoStatusTileState { - const DownloadTrackInfoStatusTileFailure({required this.failure}); - - final Failure? failure; - - @override - List get props => [failure]; -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart index 09bc639..fd73b7e 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart @@ -1,14 +1,17 @@ import 'dart:math'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -22,65 +25,78 @@ class DownloadTrackInfoStatusTile extends StatefulWidget { } class _DownloadTrackInfoStatusTileState extends State { - late final DownloadTrackInfoStatusTileCubit _infoStatusTileCubit; + late final TrackLoadingObservingCubit _trackLoadingObservingCubit = injector.get(); @override void initState() { - _infoStatusTileCubit = injector.get(param1: widget.trackWithLoadingObserver); + _trackLoadingObservingCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); super.initState(); } @override - void dispose() { - _infoStatusTileCubit.close(); - super.dispose(); + void didUpdateWidget(covariant DownloadTrackInfoStatusTile oldWidget) { + if (oldWidget.trackWithLoadingObserver != widget.trackWithLoadingObserver) { + _trackLoadingObservingCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); + } + super.didUpdateWidget(oldWidget); } @override Widget build(BuildContext context) { - return BlocBuilder( - bloc: _infoStatusTileCubit, + return BlocBuilder( + bloc: _trackLoadingObservingCubit, builder: (context, state) { - switch (state) { - case DownloadTrackInfoStatusTileDeffault(): - return DownloadTrackInfoTile( - title: S.of(context).theTrackIsNotLoaded, - iconWidget: SvgPicture.asset('resources/images/svg/track_tile/download_icon.svg', - height: 23, - width: 23, - colorFilter: const ColorFilter.mode(onSurfacePrimaryColor, BlendMode.srcIn))); - case DownloadTrackInfoStatusTileLoading(): - return DownloadTrackInfoTile( - title: S.of(context).theTrackIsLoading(state.percent != null ? formatDouble(state.percent!) : '...'), - iconWidget: Container( - padding: const EdgeInsets.all(0), - height: 23, - width: 23, - child: Builder(builder: (context) { - if (state.percent == null) { - return const StrangeOptimizedCircularProgressIndicator( - strokeWidth: 3, - color: primaryColor, - ); - } - - return CircularProgressIndicator(strokeWidth: 3, color: primaryColor, value: state.percent! / 100); - }), - ), - ); - - case DownloadTrackInfoStatusTileLoaded(): - return DownloadTrackInfoTile( - title: S.of(context).theTrackIsLoaded, - iconWidget: SvgPicture.asset('resources/images/svg/track_tile/downloaded_icon.svg', - height: 23, width: 23, colorFilter: const ColorFilter.mode(primaryColor, BlendMode.srcIn))); - case DownloadTrackInfoStatusTileFailure(): - return DownloadTrackInfoTile( - title: S.of(context).downloadError( - state.failure is NetworkFailure ? S.of(context).noConnection : state.failure?.message ?? '...'), - iconWidget: SvgPicture.asset('resources/images/svg/track_tile/error_icon.svg', - height: 23, width: 23, colorFilter: const ColorFilter.mode(errorPrimaryColor, BlendMode.srcIn))); + if (state is TrackLoadingObservingDeffault) { + return DownloadTrackInfoTile( + title: S.of(context).theTrackIsNotLoaded, + iconWidget: SvgPicture.asset('resources/images/svg/track_tile/download_icon.svg', + height: 23, width: 23)); + } + + if (state is TrackLoadingObservingLoading) { + return DownloadTrackInfoTile( + title: S.of(context).theTrackIsLoading(state.percent != null ? formatDouble(state.percent!) : '...'), + iconWidget: Container( + padding: const EdgeInsets.all(0), + height: 23, + width: 23, + child: Builder(builder: (context) { + if (state.percent == null) { + return const StrangeOptimizedCircularProgressIndicator( + strokeWidth: 3, + color: primaryColor, + ); + } + + return CircularProgressIndicator(strokeWidth: 3, color: primaryColor, value: state.percent! / 100); + }), + ), + ); + } + + if (state is TrackLoadingObservingLoaded) { + return DownloadTrackInfoTile( + title: S.of(context).theTrackIsLoaded, + iconWidget: SvgPicture.asset('resources/images/svg/track_tile/downloaded_icon.svg', + height: 23, width: 23)); } + + if (state is TrackLoadingObservingFailure) { + return DownloadTrackInfoTile( + title: S.of(context).downloadError(state.failure is NetworkFailure + ? S.of(context).noConnection + : state.failure?.message ?? '...'), + iconWidget: SvgPicture.asset('resources/images/svg/track_tile/error_icon.svg', + height: 23, width: 23), + onTap: () async { + if (state.failure != null) { + showSnackBar(S.of(context).errorCopied, context); + await Clipboard.setData(ClipboardData(text: state.failure!.message.toString())); + } + }); + } + + return Container(); }, ); } @@ -100,4 +116,9 @@ class _DownloadTrackInfoStatusTileState extends State { child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Text( - widget.title, + widget.title.replaceAll("\n", ""), style: theme.textTheme.bodyMedium?.copyWith(color: onSurfacePrimaryColor), ), ), diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart similarity index 71% rename from lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart rename to lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart index 282cc3a..cd0cc8b 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart @@ -3,18 +3,20 @@ import 'dart:async'; import 'package:async/async.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; +import 'package:spotify_downloader/core/utils/failures/failure.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_status.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; -part 'track_tile_state.dart'; +part 'download_track_info_status_tile_state.dart'; -class TrackTileCubit extends Cubit { +class TrackLoadingObservingCubit extends Cubit { TrackWithLoadingObserver? _trackWithLoadingObserver; StreamSubscription? _loadingObserverSubscription; StreamSubscription? _loadingObserverChangedSubscription; - TrackTileCubit() : super(TrackTileDeffault()); + TrackLoadingObservingCubit() : super(const TrackLoadingObservingDeffault()); Future changeTrackWithLoadingObserver(TrackWithLoadingObserver trackWithLoadingObserver) async { _trackWithLoadingObserver = trackWithLoadingObserver; @@ -54,31 +56,31 @@ class TrackTileCubit extends Cubit { final status = _trackWithLoadingObserver!.loadingObserver?.status; if (status == null) { if (_trackWithLoadingObserver!.track.isLoaded) { - emit(TrackTileLoaded()); + emit(const TrackLoadingObservingLoaded()); } else { - emit(TrackTileDeffault()); + emit(const TrackLoadingObservingDeffault()); } return; } if (status == LoadingTrackStatus.loading || status == LoadingTrackStatus.waitInLoadingQueue) { - emit(TrackTileLoading(percent: _trackWithLoadingObserver!.loadingObserver!.loadingPercent)); + emit(TrackLoadingObservingLoading(percent: _trackWithLoadingObserver!.loadingObserver!.loadingPercent)); return; } if (status == LoadingTrackStatus.failure) { - emit(TrackTileFailure()); + emit(TrackLoadingObservingFailure(failure: _trackWithLoadingObserver!.loadingObserver!.failure)); return; } if (status == LoadingTrackStatus.loadingCancelled) { - emit(TrackTileDeffault()); + emit(const TrackLoadingObservingDeffault()); return; } if (status == LoadingTrackStatus.loaded) { - emit(TrackTileLoaded()); + emit(const TrackLoadingObservingLoaded()); } } } diff --git a/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_state.dart b/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_state.dart new file mode 100644 index 0000000..b370904 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_state.dart @@ -0,0 +1,34 @@ +part of 'download_track_info_status_tile_cubit.dart'; + +sealed class TrackLoadingObservingState extends Equatable { + const TrackLoadingObservingState(); + + @override + List get props => []; +} + +final class TrackLoadingObservingDeffault extends TrackLoadingObservingState { + const TrackLoadingObservingDeffault(); +} + +final class TrackLoadingObservingLoading extends TrackLoadingObservingState { + const TrackLoadingObservingLoading({required this.percent}); + + final double? percent; + + @override + List get props => [percent]; +} + +final class TrackLoadingObservingLoaded extends TrackLoadingObservingState { + const TrackLoadingObservingLoaded(); +} + +final class TrackLoadingObservingFailure extends TrackLoadingObservingState { + const TrackLoadingObservingFailure({required this.failure}); + + final Failure? failure; + + @override + List get props => [failure]; +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart deleted file mode 100644 index 2aa9447..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_state.dart +++ /dev/null @@ -1,23 +0,0 @@ -part of 'track_tile_cubit.dart'; - -sealed class TrackTileState extends Equatable { - const TrackTileState(); - - @override - List get props => []; -} - -final class TrackTileDeffault extends TrackTileState {} - -final class TrackTileFailure extends TrackTileState {} - -final class TrackTileLoading extends TrackTileState { - const TrackTileLoading({required this.percent}); - - final double? percent; - - @override - List get props => [percent]; -} - -final class TrackTileLoaded extends TrackTileState {} diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart index 45cebb5..a635eac 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart @@ -4,7 +4,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/track_tile/cubit/track_tile_cubit.dart'; +import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; class TrackTileStatusButton extends StatefulWidget { @@ -20,18 +20,18 @@ class TrackTileStatusButton extends StatefulWidget { } class _TrackTileStatusButtonState extends State { - final _trackTileCubit = injector.get(); + final _trackLoadingObservingCubit = injector.get(); @override void initState() { - _trackTileCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); + _trackLoadingObservingCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); super.initState(); } @override void didUpdateWidget(covariant TrackTileStatusButton oldWidget) { if (oldWidget.trackWithLoadingObserver != widget.trackWithLoadingObserver) { - _trackTileCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); + _trackLoadingObservingCubit.changeTrackWithLoadingObserver(widget.trackWithLoadingObserver); } super.didUpdateWidget(oldWidget); } @@ -49,10 +49,10 @@ class _TrackTileStatusButtonState extends State { alignment: Alignment.center, width: 50, padding: const EdgeInsets.only(right: 10), - child: BlocBuilder( - bloc: _trackTileCubit, + child: BlocBuilder( + bloc: _trackLoadingObservingCubit, builder: (context, state) { - if (state is TrackTileLoading) { + if (state is TrackLoadingObservingLoading) { return GestureDetector( onTap: () { widget.onCancelButtonClicked?.call(); @@ -65,7 +65,7 @@ class _TrackTileStatusButtonState extends State { ); } - if (state is TrackTileFailure) { + if (state is TrackLoadingObservingFailure) { return GestureDetector( onTap: () {}, child: SvgPicture.asset( @@ -83,10 +83,10 @@ class _TrackTileStatusButtonState extends State { Container( alignment: Alignment.center, width: 50, - child: BlocBuilder( - bloc: _trackTileCubit, + child: BlocBuilder( + bloc: _trackLoadingObservingCubit, builder: (context, state) { - if (state is TrackTileDeffault) { + if (state is TrackLoadingObservingDeffault) { return GestureDetector( onTap: () { widget.onDownloadButtonClicked?.call(); @@ -95,7 +95,7 @@ class _TrackTileStatusButtonState extends State { height: 35, width: 35)); } - if (state is TrackTileLoading) { + if (state is TrackLoadingObservingLoading) { if (state.percent == null) { return Container( padding: const EdgeInsets.all(0), @@ -123,7 +123,7 @@ class _TrackTileStatusButtonState extends State { ); } - if (state is TrackTileLoaded) { + if (state is TrackLoadingObservingLoaded) { return SvgPicture.asset( 'resources/images/svg/track_tile/downloaded_icon.svg', height: 35, @@ -131,7 +131,7 @@ class _TrackTileStatusButtonState extends State { ); } - if (state is TrackTileFailure) { + if (state is TrackLoadingObservingFailure) { return GestureDetector( onTap: () => widget.onDownloadButtonClicked?.call(), child: SvgPicture.asset( diff --git a/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart b/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart index c61c37b..c3fdbb2 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart @@ -37,7 +37,7 @@ class TracksCollectionManageBar extends StatelessWidget { child: ElevatedButton( onPressed: _onAllDownloadButtonClicked, style: ButtonStyle( - shape: MaterialStateProperty.all( + shape: WidgetStateProperty.all( RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)))), child: Text(S.of(context).downloadAll, style: theme.textTheme.bodySmall!.copyWith(color: onPrimaryColor, fontWeight: FontWeight.w700)), ), diff --git a/lib/features/presentation/main/view/main_screen.dart b/lib/features/presentation/main/view/main_screen.dart index 5bb92dd..38e9df5 100644 --- a/lib/features/presentation/main/view/main_screen.dart +++ b/lib/features/presentation/main/view/main_screen.dart @@ -28,6 +28,8 @@ class _MainScreenState extends State with AutoRouteAwareStateMixin { WidgetsBinding.instance.addPostFrameCallback((_) { Future(() async { if (!(await _permissionsManager.isPermissionsGranted()) && context.mounted) { + //idk i checked it in previous line + // ignore: use_build_context_synchronously showPermissonsDialog(context, () async { final isPermissionsGranted = await _permissionsManager.requestPermissions(); await _requiringPermissionServicesInitializer.init(); diff --git a/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart b/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart index e05f1f0..77ae619 100644 --- a/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart +++ b/lib/features/presentation/settings/widgets/language_setting/view/language_setting.dart @@ -65,8 +65,8 @@ class _LanguageSettingState extends State { elevation: 0), buttonStyleData: ButtonStyleData( decoration: BoxDecoration(borderRadius: BorderRadius.circular(5)), - overlayColor: MaterialStateProperty.resolveWith((state) { - if (state.contains(MaterialState.pressed)) { + overlayColor: WidgetStateProperty.resolveWith((state) { + if (state.contains(WidgetState.pressed)) { return onSurfaceSplashColor; } @@ -77,8 +77,8 @@ class _LanguageSettingState extends State { width: 120, ), menuItemStyleData: MenuItemStyleData( - overlayColor: MaterialStateProperty.resolveWith((state) { - if (state.contains(MaterialState.pressed)) { + overlayColor: WidgetStateProperty.resolveWith((state) { + if (state.contains(WidgetState.pressed)) { return onSurfaceSplashColor; } diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 582e4b8..9665e0a 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -66,6 +66,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("What you want to download?"), "downloadLikedTracks": MessageLookupByLibrary.simpleMessage("Download Liked Tracks"), + "errorCopied": MessageLookupByLibrary.simpleMessage("Error copied!"), "errorOccurredWhileLoadingActiveDownloads": m2, "grant": MessageLookupByLibrary.simpleMessage("Grant"), "grantPermissions": diff --git a/lib/generated/intl/messages_ru.dart b/lib/generated/intl/messages_ru.dart index 9de503b..74dfec2 100644 --- a/lib/generated/intl/messages_ru.dart +++ b/lib/generated/intl/messages_ru.dart @@ -67,6 +67,8 @@ class MessageLookup extends MessageLookupByLibrary { "Ссылка на трек, плейлист или альбом"), "downloadLikedTracks": MessageLookupByLibrary.simpleMessage("Скачать любимые треки"), + "errorCopied": + MessageLookupByLibrary.simpleMessage("Ошибка скопирована!"), "errorOccurredWhileLoadingActiveDownloads": m2, "grant": MessageLookupByLibrary.simpleMessage("Предоставить доступ"), "grantPermissions": diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index e10b8b3..9e946a8 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -630,6 +630,16 @@ class S { args: [], ); } + + /// `Error copied!` + String get errorCopied { + return Intl.message( + 'Error copied!', + name: 'errorCopied', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index c465ba3..cd0403f 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -56,5 +56,6 @@ "developed": "Developed", "language": "Language", "youCanCloseTheAppAndTheDownloadWillContinue": "You can close the app and the download will continue!", - "youCanDeleteThisMessage": "(you can delete this message)" + "youCanDeleteThisMessage": "(you can delete this message)", + "errorCopied": "Error copied!" } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index bb12c86..d19748e 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -56,5 +56,6 @@ "developed": "Разработано", "language": "Язык", "youCanCloseTheAppAndTheDownloadWillContinue": "Вы можете закрыть приложение и загрузка продолжится !", - "youCanDeleteThisMessage": "(вы можете удалить это сообщение)" + "youCanDeleteThisMessage": "(вы можете удалить это сообщение)", + "errorCopied": "Ошибка скопирована!" } \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 8039728..3ed0787 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: "direct main" description: name: awesome_notifications - sha256: "65f730f9c0e73a346039ef746384bcff1773f9f03821b859705a7ab8db977b23" + sha256: "3eeb9e0cdfc72c7b4b83e9924da38ea86edd65a2af02bd5429aa41dce634ee90" url: "https://pub.dev" source: hosted - version: "0.8.2" + version: "0.8.3" awesome_notifications_core: dependency: "direct main" description: @@ -601,10 +601,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -629,6 +629,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -649,26 +673,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.12.0" metadata_god: dependency: "direct main" description: @@ -689,10 +713,10 @@ packages: dependency: "direct main" description: name: modal_bottom_sheet - sha256: "3bba63c62d35c931bce7f8ae23a47f9a05836d8cb3c11122ada64e0b2f3d718f" + sha256: eac66ef8cb0461bf069a38c5eb0fa728cee525a531a8304bd3f7b2185407c67e url: "https://pub.dev" source: hosted - version: "3.0.0-pre" + version: "3.0.0" nested: dependency: transitive description: @@ -753,10 +777,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1078,10 +1102,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timing: dependency: transitive description: @@ -1210,6 +1234,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" watcher: dependency: transitive description: @@ -1291,5 +1323,5 @@ packages: source: hosted version: "2.0.4" sdks: - dart: ">=3.2.0 <3.11.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <3.11.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.yaml b/pubspec.yaml index 0c6df8e..f9e717b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -29,13 +29,13 @@ dependencies: cached_network_image: ^3.3.0 path: ^1.8.3 connectivity_plus: ^5.0.2 - modal_bottom_sheet: 3.0.0-pre + modal_bottom_sheet: ^3.0.0 awesome_notifications_core: ^0.8.1 awesome_notifications: ^0.8.2 file_picker: ^6.1.1 device_info_plus: ^9.1.1 permission_handler: ^11.1.0 - intl: ^0.18.1 + intl: ^0.19.0 flutter_localizations: sdk: flutter dropdown_button2: ^2.3.9 diff --git a/resources/images/svg/track_tile/error_icon.svg b/resources/images/svg/track_tile/error_icon.svg index 718e734..ee83b5e 100644 --- a/resources/images/svg/track_tile/error_icon.svg +++ b/resources/images/svg/track_tile/error_icon.svg @@ -1,3 +1,3 @@ - + From cda788c836eded7674102daa616846a596722de3 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Fri, 28 Jun 2024 19:29:15 +1000 Subject: [PATCH 16/41] decrease percent changed events sending during track downloading --- ...owload_audio_from_youtube_data_source.dart | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart index a4683ad..30e7288 100644 --- a/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart +++ b/lib/features/data_domain/tracks/download_tracks/data/data_sources/dowload_audio_from_youtube_data_source.dart @@ -214,6 +214,8 @@ class DownloadAudioFromYoutubeDataSource { final videoFileSize = downloadStreamInfo.size.totalBytes; int loadedBytesCount = 0; + double previousSendedPercent = 0; + final cancellationTokenCompleter = Completer(); final failureCompleter = Completer(); @@ -234,7 +236,12 @@ class DownloadAudioFromYoutubeDataSource { } loadedBytesCount += chunk.length; - sendPort.send((loadedBytesCount / videoFileSize) * 90); + + final percent = (loadedBytesCount / videoFileSize) * 90; + if (percent - previousSendedPercent >= 2 || percent > 90 - 1) { + sendPort.send(percent); + previousSendedPercent = percent; + } }) ..onError((e) { if (!failureCompleter.isCompleted) { @@ -271,25 +278,24 @@ class DownloadAudioFromYoutubeDataSource { Future _handleDownloadStream( CancellableStream downloadVideoStream, Function(double) setLoadingPercent) async { - final downloadVideoCompleter = Completer(); - - final downloadVideoStreamSub = downloadVideoStream.stream.listen((event) { - if (event is double) { - setLoadingPercent(event); - } + final downloadVideoCompleter = Completer(); - if (event is CancellableResult) { - downloadVideoCompleter.complete(event); - } - }); + final downloadVideoStreamSub = downloadVideoStream.stream.listen((event) { + if (event is double) { + setLoadingPercent(event); + } - final result = await downloadVideoCompleter.future; - downloadVideoStreamSub.cancel(); - return result; + if (event is CancellableResult) { + downloadVideoCompleter.complete(event); + } + }); + final result = await downloadVideoCompleter.future; + downloadVideoStreamSub.cancel(); + return result; } - Future _convertFileToMp3(String rawPath, String audioPath) async { + Future _convertFileToMp3(String rawPath, String audioPath) async { final audioFile = File(audioPath); if (await audioFile.exists()) { await audioFile.delete(); From 8dec7a2b72257494054c35c981373d5e141e6c76 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sat, 29 Jun 2024 15:55:31 +1000 Subject: [PATCH 17/41] changed header displaying proccess (remove custom persistent header delegate) changed surface color like in Spotify changed appBarColor to more muted changed BackIcon changedd appBar opacity calculations --- lib/core/app/colors/colors.dart | 2 +- lib/core/app/themes/theme_consts.dart | 1 + lib/core/app/themes/themes.dart | 1 + lib/core/utils/util_methods.dart | 8 + .../about_app/view/about_app_screen.dart | 5 +- .../view/change_source_video_screen.dart | 8 +- ...tom_sliver_persistent_header_delegate.dart | 30 --- .../download_tracks_collection_screen.dart | 196 +++++++++--------- ...e_animation.dart => custom_scrollbar.dart} | 8 +- .../view/download_track_info_status_tile.dart | 4 +- .../download_tracks_collection_header.dart | 29 ++- .../gradient_app_bar_with_opacity.dart | 18 +- .../view/track_tile_status_button.dart | 12 +- .../widgets/widgets.dart | 3 +- .../settings/view/settings_screen.dart | 5 +- ...lections_loading_notifications_sender.dart | 2 +- resources/images/svg/back_icon.svg | 2 +- .../images/svg/track_tile/cancel_icon.svg | 2 +- .../images/svg/track_tile/download_icon.svg | 2 +- resources/images/svg/track_tile/more_info.svg | 6 +- 20 files changed, 164 insertions(+), 180 deletions(-) create mode 100644 lib/core/app/themes/theme_consts.dart delete mode 100644 lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart rename lib/features/presentation/download_tracks_collection/widgets/{scrollbar_with_silde_animation.dart => custom_scrollbar.dart} (95%) diff --git a/lib/core/app/colors/colors.dart b/lib/core/app/colors/colors.dart index 1c91f95..1ff367b 100644 --- a/lib/core/app/colors/colors.dart +++ b/lib/core/app/colors/colors.dart @@ -5,7 +5,7 @@ const onBackgroundPrimaryColor = Color.fromARGB(255, 255, 255, 255); const onBackgroundSecondaryColor = Color.fromARGB(255, 153, 153, 153); const onBackgroundThirdRateColor = Color.fromARGB(255, 110, 110, 110); -const surfaceColor = Color.fromARGB(255, 42, 42, 42); +const surfaceColor = Color.fromARGB(255, 36, 36, 36); const onSurfacePrimaryColor = Color.fromARGB(255, 255, 255, 255); const onSurfaceSecondaryColor = Color.fromARGB(255, 153, 153, 153); const onSurfaceSplashColor = Color.fromARGB(60, 153, 153, 153); diff --git a/lib/core/app/themes/theme_consts.dart b/lib/core/app/themes/theme_consts.dart new file mode 100644 index 0000000..1fbdf63 --- /dev/null +++ b/lib/core/app/themes/theme_consts.dart @@ -0,0 +1 @@ +const backIconSize = 25.0; \ No newline at end of file diff --git a/lib/core/app/themes/themes.dart b/lib/core/app/themes/themes.dart index 4b2908d..f4b5c13 100644 --- a/lib/core/app/themes/themes.dart +++ b/lib/core/app/themes/themes.dart @@ -19,6 +19,7 @@ final mainTheme = ThemeData( return onBackgroundSecondaryColor; } })), + progressIndicatorTheme: const ProgressIndicatorThemeData(color: primaryColor), switchTheme: SwitchThemeData( trackColor: WidgetStateProperty.resolveWith((states) { if (!states.contains(WidgetState.selected)) { diff --git a/lib/core/utils/util_methods.dart b/lib/core/utils/util_methods.dart index 2184de8..0f0d26b 100644 --- a/lib/core/utils/util_methods.dart +++ b/lib/core/utils/util_methods.dart @@ -49,3 +49,11 @@ Future> handleSpotifyClientExceptions(Future= max) { + throw ArgumentError('Min must be less than max'); + } + + return (value - min) / (max - min); + } diff --git a/lib/features/presentation/about_app/view/about_app_screen.dart b/lib/features/presentation/about_app/view/about_app_screen.dart index 90ed71a..80681b6 100644 --- a/lib/features/presentation/about_app/view/about_app_screen.dart +++ b/lib/features/presentation/about_app/view/about_app_screen.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -30,8 +31,8 @@ class AboutAppScreen extends StatelessWidget { }, icon: SvgPicture.asset( 'resources/images/svg/back_icon.svg', - height: 35, - width: 35, + height: backIconSize, + width: backIconSize, )), Padding( padding: const EdgeInsets.only(left: 10), diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 04c2792..0749371 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -3,10 +3,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @RoutePage() @@ -66,8 +68,8 @@ class _ChangeSourceVideoScreenState extends State { }, icon: SvgPicture.asset( 'resources/images/svg/back_icon.svg', - height: 35, - width: 35, + height: backIconSize, + width: backIconSize, )), Padding( padding: const EdgeInsets.only(left: 10), @@ -162,7 +164,7 @@ class _ChangeSourceVideoScreenState extends State { } if (state is ChangeSourceVideoLoading) { - return const Center(child: CircularProgressIndicator()); + return const Center(child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); } return Container(); diff --git a/lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart b/lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart deleted file mode 100644 index f575a32..0000000 --- a/lib/features/presentation/download_tracks_collection/custom_sliver_persistent_header_delegate.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -class CustomSliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate { - CustomSliverPersistentHeaderDelegate( - {required this.maxHeight, required this.minHeight, required this.child, this.onHeightCalculated}); - - final double minHeight; - final double maxHeight; - final Widget child; - final void Function(double height)? onHeightCalculated; - - @override - double get minExtent => minHeight; - @override - double get maxExtent => maxHeight; - - @override - Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) { - onHeightCalculated?.call(max(minExtent, maxExtent - shrinkOffset)); - - return SizedBox.expand(child: child); - } - - @override - bool shouldRebuild(CustomSliverPersistentHeaderDelegate oldDelegate) { - return maxHeight != oldDelegate.maxHeight || minHeight != oldDelegate.minHeight || child != oldDelegate.child; - } -} - diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index e49a88c..bfe131c 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; @@ -11,12 +13,10 @@ import 'package:spotify_downloader/features/data_domain/tracks_collections/histo import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; import 'package:spotify_downloader/generated/l10n.dart'; -import '../custom_sliver_persistent_header_delegate.dart'; -import '../widgets/download_tracks_collection_header.dart'; - abstract class DownloadTracksCollectionScreen extends StatefulWidget { final String? url; final HistoryTracksCollection? historyTracksCollection; @@ -50,12 +50,23 @@ class _DownloadTracksCollectionScreenState extends State _appBarOpacityField; + set _appBarOpacity(double newValue) { + _appBarOpacityField = newValue; + _appBarOpacityChangedController.add(newValue); + } + + final StreamController _appBarOpacityChangedController = StreamController(); double get appBarHeightWithViewPadding => _appBarHeight + (MediaQuery.maybeOf(context)?.viewPadding.top ?? 0); @@ -64,6 +75,8 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _getTracksCollectionBloc, builder: (context, getTracksCollectionState) { - if (getTracksCollectionState is GetTracksCollectionNetworkFailure) { - return NetworkFailureSplash( - onRetryAgainButtonClicked: () => _getTracksCollectionBloc.add(GetTracksCollectionLoad())); - } - - if (getTracksCollectionState is GetTracksCollectionLoaded) { - return BlocBuilder( - bloc: _getTracksBloc, - builder: (context, getTracksState) { + return BlocBuilder( + bloc: _getTracksBloc, + builder: (context, getTracksState) { + if (getTracksCollectionState is GetTracksCollectionNetworkFailure) { + return NetworkFailureSplash( + onRetryAgainButtonClicked: () => _getTracksCollectionBloc.add(GetTracksCollectionLoad())); + } + + if (getTracksCollectionState is GetTracksCollectionLoaded) { if (getTracksState is GetTracksBeforePartGotNetworkFailure) { return NetworkFailureSplash( onRetryAgainButtonClicked: () => _getTracksBloc @@ -164,7 +183,8 @@ class _DownloadTracksCollectionScreenState extends State - _onAllDownloadButtonClicked( - filterTracksState: _filterTracksBloc.state, - getTracksState: getTracksState), - )) - ], - ); - }), - )), + SliverToBoxAdapter( + child: Builder(builder: (context) { + if (_headerHeight == null) { + SchedulerBinding.instance + .addPostFrameCallback((_) => updateHeaderHeight()); + } + + return DownloadTracksCollectionHeader( + key: _headerKey, + backgroundGradientColor: _backgroundGradientColor, + title: getTracksCollectionState.tracksCollection.name, + imageUrl: getTracksCollectionState.tracksCollection.bigImageUrl ?? '', + onFilterQueryChanged: _onFilterQueryChanged, + onAllDownloadButtonClicked: () => _onAllDownloadButtonClicked( + filterTracksState: _filterTracksBloc.state, + getTracksState: getTracksState), + ); + }), + ), BlocBuilder( bloc: _filterTracksBloc, builder: (context, state) { @@ -294,18 +292,12 @@ class _DownloadTracksCollectionScreenState extends State _getTracksCollectionBloc.add(GetTracksCollectionLoad())); - } - - return const Center(child: CircularProgressIndicator()); - }, - ); - } - - return const Center(child: CircularProgressIndicator()); + return const Center( + child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); + }, + ); }, ), BlocBuilder( @@ -314,18 +306,23 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _getTracksBloc, builder: (context, getTracksState) { - if (getTracksCollectionState is GetTracksCollectionLoaded && - getTracksState is GetTracksTracksGot) { - return GradientAppBarWithOpacity.visible( - height: _appBarHeight, - firstColor: _appBarColor, - secondaryColor: backgroundColor, - title: getTracksCollectionState.tracksCollection.name, - opacity: _appBarOpacity, - ); - } - - return GradientAppBarWithOpacity.invisible(height: _appBarHeight); + return StreamBuilder( + initialData: 0, + stream: _appBarOpacityChangedController.stream, + builder: (context, newOpacity) { + if (getTracksCollectionState is GetTracksCollectionLoaded && + getTracksState is GetTracksTracksGot) { + return GradientAppBarWithOpacity.visible( + height: _appBarHeight, + firstColor: _backgroundGradientColor, + secondaryColor: backgroundColor, + title: getTracksCollectionState.tracksCollection.name, + opacity: newOpacity.data ?? 0, + ); + } + + return GradientAppBarWithOpacity.invisible(height: _appBarHeight); + }); }, ); }, @@ -336,11 +333,9 @@ class _DownloadTracksCollectionScreenState extends State ScrollbarWithSlideAnimationState(); + CustomScrollbarState createState() => CustomScrollbarState(); } -class ScrollbarWithSlideAnimationState extends State with SingleTickerProviderStateMixin { +class CustomScrollbarState extends State with SingleTickerProviderStateMixin { late final Widget Function(BuildContext context, bool isDragging) _thumbBuilder; ScrollController? _scrollController; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart index fd73b7e..906fee5 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/utils/failures/failures.dart'; @@ -64,11 +63,10 @@ class _DownloadTrackInfoStatusTileState extends State - Image.asset('resources/images/another/loading_track_collection_image.png'), - errorWidget: (context, imageUrl, _) => - Image.asset('resources/images/another/loading_track_collection_image.png'), + child: Container( + decoration: BoxDecoration(boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + spreadRadius: 7, + blurRadius: 13, + ) + ]), + child: CachedNetworkImage( + width: MediaQuery.of(context).size.width * 0.6, + height: MediaQuery.of(context).size.width * 0.6, + fit: BoxFit.contain, + imageUrl: imageUrl, + placeholder: (context, imageUrl) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + errorWidget: (context, imageUrl, _) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + ), )); }), Padding( - padding: const EdgeInsets.only(top: 10, left: 30, right: 30), + padding: const EdgeInsets.only(top: 10, left: 15, right: 15), child: Text( title, style: theme.textTheme.titleLarge, diff --git a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart index d22cdd2..3310316 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/utils/util_methods.dart'; class GradientAppBarWithOpacity extends StatelessWidget { @@ -11,20 +12,20 @@ class GradientAppBarWithOpacity extends StatelessWidget { required this.secondaryColor, this.opacity = 0, this.height = 55, - this.iconSize = 35}) + this.iconSize = backIconSize}) : isAppBarVisible = true; - const GradientAppBarWithOpacity.invisible({super.key, this.height = 55, this.iconSize = 35}) + const GradientAppBarWithOpacity.invisible({super.key, this.height = 55, this.iconSize = backIconSize}) : isAppBarVisible = false, opacity = 0, title = '', - firstColor = null, - secondaryColor = null; + firstColor = Colors.transparent, + secondaryColor = Colors.transparent; final bool isAppBarVisible; final String title; - final Color? firstColor; - final Color? secondaryColor; + final Color firstColor; + final Color secondaryColor; final double opacity; final double height; final double iconSize; @@ -38,14 +39,15 @@ class GradientAppBarWithOpacity extends StatelessWidget { Builder( builder: (context) { if (isAppBarVisible) { + return Opacity( opacity: opacity, child: AnimatedContainer( duration: const Duration(milliseconds: 700), decoration: BoxDecoration( gradient: LinearGradient(colors: [ - firstColor ?? Colors.transparent, - getIntermediateColor(firstColor ?? Colors.transparent, secondaryColor ?? Colors.transparent, 0.7) + getIntermediateColor(firstColor, secondaryColor, 0.4), + getIntermediateColor(firstColor, secondaryColor, 0.6) ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), ), ); diff --git a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart index a635eac..a15c1ad 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/track_tile/view/track_tile_status_button.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart'; @@ -102,7 +101,7 @@ class _TrackTileStatusButtonState extends State { height: 32, width: 32, child: - const StrangeOptimizedCircularProgressIndicator(strokeWidth: 4, color: primaryColor)); + const StrangeOptimizedCircularProgressIndicator(strokeWidth: 4)); } return Container( @@ -111,14 +110,7 @@ class _TrackTileStatusButtonState extends State { width: 32, child: CircularProgressIndicator( strokeWidth: 4, - color: primaryColor, - value: (() { - if (state.percent != null) { - return state.percent! / 100; - } - - return null; - }).call(), + value: state.percent! / 100 ), ); } diff --git a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart index 04503ca..d5480e5 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart @@ -1,6 +1,7 @@ +export 'custom_scrollbar.dart'; +export 'download_tracks_collection_header.dart'; export 'gradient_app_bar_with_opacity.dart'; export 'network_failure_splash.dart'; -export 'scrollbar_with_silde_animation.dart'; export 'track_tile_placeholder.dart'; export 'tracks_collection_manage_bar.dart'; export 'track_tile/view/track_tile.dart'; diff --git a/lib/features/presentation/settings/view/settings_screen.dart b/lib/features/presentation/settings/view/settings_screen.dart index 984116d..80ca543 100644 --- a/lib/features/presentation/settings/view/settings_screen.dart +++ b/lib/features/presentation/settings/view/settings_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -39,8 +40,8 @@ class _SettingsScreenState extends State { }, icon: SvgPicture.asset( 'resources/images/svg/back_icon.svg', - height: 35, - width: 35, + height: backIconSize, + width: backIconSize, )), Padding( padding: const EdgeInsets.only(left: 10), diff --git a/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart b/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart index eee8d36..ee2a672 100644 --- a/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart +++ b/lib/features/presentation/tracks_collections_loading_notifications/view/tracks_collections_loading_notifications_sender.dart @@ -63,7 +63,7 @@ class TracksCollectionsLoadingNotificationsSender { content: NotificationContent( id: messageId, channelKey: mainChannelKey, - actionType: ActionType.SilentAction, + actionType: ActionType.Default, title: S.current.tracksAreBeingLoaded, backgroundColor: primaryColor, body: diff --git a/resources/images/svg/back_icon.svg b/resources/images/svg/back_icon.svg index b4cde0e..df28276 100644 --- a/resources/images/svg/back_icon.svg +++ b/resources/images/svg/back_icon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/svg/track_tile/cancel_icon.svg b/resources/images/svg/track_tile/cancel_icon.svg index 4320269..aedcd1f 100644 --- a/resources/images/svg/track_tile/cancel_icon.svg +++ b/resources/images/svg/track_tile/cancel_icon.svg @@ -1,3 +1,3 @@ - + diff --git a/resources/images/svg/track_tile/download_icon.svg b/resources/images/svg/track_tile/download_icon.svg index 61fcd4f..08c5b2c 100644 --- a/resources/images/svg/track_tile/download_icon.svg +++ b/resources/images/svg/track_tile/download_icon.svg @@ -1,3 +1,3 @@ - + diff --git a/resources/images/svg/track_tile/more_info.svg b/resources/images/svg/track_tile/more_info.svg index 275bb39..3c564c1 100644 --- a/resources/images/svg/track_tile/more_info.svg +++ b/resources/images/svg/track_tile/more_info.svg @@ -1,5 +1,5 @@ - - - + + + From 51bef08565f9ed6b5ea52e1c3c601666741b44be Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 30 Jun 2024 21:48:47 +1000 Subject: [PATCH 18/41] created scrollbar physics like in Spotify some optimizations fixes change appBar color for litle --- android/app/src/main/AndroidManifest.xml | 6 +- lib/core/utils/util_methods.dart | 33 ++-- .../entities/loading_track_observer.dart | 4 +- .../entities/track_loading_notifier.dart | 10 +- .../download_tracks_collection_screen.dart | 28 ++-- .../widgets/custom_scrollbar.dart | 147 ++++++++++++++---- .../download_tracks_collection_header.dart | 2 +- .../gradient_app_bar_with_opacity.dart | 8 +- ...download_track_info_status_tile_cubit.dart | 14 +- 9 files changed, 176 insertions(+), 76 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e7cc6bd..6e43984 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -31,7 +31,9 @@ - + + @@ -42,5 +44,5 @@ - + \ No newline at end of file diff --git a/lib/core/utils/util_methods.dart b/lib/core/utils/util_methods.dart index 0f0d26b..59e58fc 100644 --- a/lib/core/utils/util_methods.dart +++ b/lib/core/utils/util_methods.dart @@ -39,21 +39,28 @@ Future> handleSpotifyClientExceptions(Future', '|']; +String? formatStringToFileFormat(String? string) { + final forbiddenChars = ['/', '\\', ':', '*', '?', '<', '>', '|']; - String? formattedString = string; - for (var char in forbiddenChars) { - formattedString = formattedString?.replaceAll(char, ''); - } - - return formattedString; + String? formattedString = string; + for (var char in forbiddenChars) { + formattedString = formattedString?.replaceAll(char, ''); } - double normalize(double value, double min, double max) { - if (min >= max) { - throw ArgumentError('Min must be less than max'); - } + return formattedString; +} - return (value - min) / (max - min); +double normalize(double value, double min, double max) { + if (min >= max) { + throw ArgumentError('Min must be less than max'); } + + return (value - min) / (max - min); +} + +double closest(double value, double num1, double num2) { + double diff1 = (value - num1).abs(); + double diff2 = (value - num2).abs(); + + return (diff1 < diff2) ? num1 : num2; +} diff --git a/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart index 240b95e..0d35b65 100644 --- a/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart @@ -10,9 +10,9 @@ class LoadingTrackObserver { required this.loadedStream, required this.loadingCancelledStream, required this.loadingFailureStream, + required this.loadingTrackStatusStream, required LoadingTrackStatus Function() getLoadingTrackStatus}) : _getLoadingTrackStatus = getLoadingTrackStatus { - startLoadingStream.listen((youtubeUrl) => _youtubeUrl = youtubeUrl); loadingPercentChangedStream.listen((percent) => _loadingPercent = percent); loadedStream.listen((savePath) => _resultSavePath = savePath); @@ -27,11 +27,11 @@ class LoadingTrackObserver { final LoadingTrackStatus Function() _getLoadingTrackStatus; LoadingTrackStatus get status => _getLoadingTrackStatus.call(); + final Stream loadingTrackStatusStream; String? _youtubeUrl; String? get youtubeUrl => _youtubeUrl; - double? _loadingPercent; double? get loadingPercent => _loadingPercent; diff --git a/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart index c4b0fb5..b18dc57 100644 --- a/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_loading_notifier.dart @@ -10,6 +10,8 @@ class TrackLoadingNotifier { final StreamController _loadedStreamController = StreamController(); final StreamController _loadingCancelledStreamController = StreamController(); final StreamController _loadingFailureStreamController = StreamController(); + final StreamController _loadingTrackStatusStreamController = + StreamController(); LoadingTrackObserver? _loadingTrackObserver; LoadingTrackObserver get loadingTrackObserver => _loadingTrackObserver ??= LoadingTrackObserver( @@ -18,9 +20,15 @@ class TrackLoadingNotifier { loadedStream: _loadedStreamController.stream.asBroadcastStream(), loadingCancelledStream: _loadingCancelledStreamController.stream.asBroadcastStream(), loadingFailureStream: _loadingFailureStreamController.stream.asBroadcastStream(), + loadingTrackStatusStream: _loadingTrackStatusStreamController.stream.asBroadcastStream(), getLoadingTrackStatus: () => _status); - LoadingTrackStatus _status = LoadingTrackStatus.waitInLoadingQueue; + LoadingTrackStatus _statusField = LoadingTrackStatus.waitInLoadingQueue; + LoadingTrackStatus get _status => _statusField; + set _status(LoadingTrackStatus newStatus) { + _statusField = newStatus; + _loadingTrackStatusStreamController.add(newStatus); + } void startLoading(String youtubeUrl) { if (_status == LoadingTrackStatus.waitInLoadingQueue) { diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index bfe131c..16e9754 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -56,8 +56,8 @@ class _DownloadTracksCollectionScreenState extends State _appBarOpacityField; @@ -113,7 +113,8 @@ class _DownloadTracksCollectionScreenState extends State updateHeaderHeight()); - } + sheduleHeaderHeightUpdate(); return DownloadTracksCollectionHeader( key: _headerKey, @@ -333,9 +334,14 @@ class _DownloadTracksCollectionScreenState extends State _prototypeItem; + const CustomScrollbar( {super.key, required this.child, @@ -32,7 +37,26 @@ class CustomScrollbar extends StatefulWidget { this.durationBeforeHide = const Duration(seconds: 1), this.minScrollOffset, this.maxScrollOfssetFromEnd, - this.hideThumbWhenOutOfOffset = false}); + this.hideThumbWhenOutOfOffset = false}) + : isFixedScroll = false, + _prototypeItem = null; + + const CustomScrollbar.fixedScroll( + {super.key, + required this.child, + this.thumbBuilder, + this.controller, + this.scrollBarHeight, + this.animationCurve = Curves.easeInOut, + this.animationDuration = const Duration(milliseconds: 500), + this.thumbMargin = const EdgeInsets.all(0), + this.durationBeforeHide = const Duration(seconds: 1), + this.minScrollOffset, + this.maxScrollOfssetFromEnd, + this.hideThumbWhenOutOfOffset = false, + required Widget prototypeItem}) + : _prototypeItem = prototypeItem, + isFixedScroll = true; @override CustomScrollbarState createState() => CustomScrollbarState(); @@ -55,10 +79,17 @@ class CustomScrollbarState extends State with SingleTickerProvi bool _isOutOfOffsetScroll = true; - double get minScrollOffset => widget.minScrollOffset ?? 0; - double get maxScrollOffsetFromEnd => widget.maxScrollOfssetFromEnd ?? 0; + double get _minScrollOffset => widget.minScrollOffset ?? 0; + double get _maxScrollOffsetFromEnd => widget.maxScrollOfssetFromEnd ?? 0; + double? get _maxScrollOffset => + _scrollController != null ? _scrollController!.position.maxScrollExtent - _maxScrollOffsetFromEnd : null; + + Timer? _plannedHidding; + + final GlobalKey _prototypeItemKey = GlobalKey(); + double? _prototypeHeight; - Timer? plannedHidding; + double _scrollBarOffset = 0; @override void initState() { @@ -78,27 +109,46 @@ class CustomScrollbarState extends State with SingleTickerProvi curve: widget.animationCurve, )); - SchedulerBinding.instance.addPostFrameCallback((timeStamp) { + _updateScrollController(); + _updatePrototypeHeight(); + } + + @override + void didUpdateWidget(CustomScrollbar oldWidget) { + super.didUpdateWidget(oldWidget); + + _updateScrollController(); + _updatePrototypeHeight(); + } + + void _updateScrollController() { + if (_scrollController != null) { + _scrollController!.removeListener(_onScroll); + _scrollController!.position.isScrollingNotifier.removeListener(_onScrollStatusChanged); + } + + _scrollController = widget.controller ?? PrimaryScrollController.of(context); + _scrollController!.addListener(_onScroll); + + SchedulerBinding.instance.addPostFrameCallback((_) { _scrollController!.position.isScrollingNotifier.addListener(_onScrollStatusChanged); }); } + void _updatePrototypeHeight() { + if (widget.isFixedScroll) { + SchedulerBinding.instance.addPostFrameCallback((_) { + _prototypeHeight = (_prototypeItemKey?.currentContext?.findRenderObject() as RenderBox?)?.size.height; + }); + } + } + Widget _createDeffaultThumb(BuildContext context, bool isDragging) { return Container(width: 6, height: 100, color: Colors.black.withOpacity(0.7)); } @override void didChangeDependencies() { - if (_scrollController == null) { - _scrollController = widget.controller ?? PrimaryScrollController.of(context); - _scrollController!.addListener(_onScroll); - } else if (widget.controller == null) { - _scrollController!.removeListener(_onScroll); - _scrollController = PrimaryScrollController.of(context); - _scrollController!.addListener(_onScroll); - _scrollController!.position.isScrollingNotifier.addListener(_onScrollStatusChanged); - } - super.didChangeDependencies(); } @@ -110,9 +160,16 @@ class CustomScrollbarState extends State with SingleTickerProvi } void _onScroll() { - final scrollOffset = _scrollController!.offset - minScrollOffset; - final totalScrollOffset = _scrollController!.position.maxScrollExtent - maxScrollOffsetFromEnd - minScrollOffset; - _thumbOffset = (scrollOffset / totalScrollOffset * _maxThumbOffset); + if (!_isDragging) { + _scrollBarOffset = _scrollController!.offset; + _updateThumbOffset(); + } + } + + void _updateThumbOffset() { + var thumbScrollOffset = _scrollBarOffset - _minScrollOffset; + final totalScrollOffset = _scrollController!.position.maxScrollExtent - _maxScrollOffsetFromEnd - _minScrollOffset; + _thumbOffset = (thumbScrollOffset / totalScrollOffset * _maxThumbOffset); if (_thumbOffset < 0 || _thumbOffset > _maxThumbOffset || totalScrollOffset < 0) { if (!_isOutOfOffsetScroll) { _isOutOfOffsetScroll = true; @@ -136,15 +193,15 @@ class CustomScrollbarState extends State with SingleTickerProvi void _onScrollStatusChanged() { if (_scrollController!.position.isScrollingNotifier.value && !_isThumbShown && !_isOutOfOffsetScroll) { - plannedHidding?.cancel(); - plannedHidding = null; + _plannedHidding?.cancel(); + _plannedHidding = null; _showThumb(); return; } if (_thumbShouldHide()) { - plannedHidding?.cancel(); - plannedHidding = null; + _plannedHidding?.cancel(); + _plannedHidding = null; _schedulePossibleThumbHidding(); } @@ -160,7 +217,7 @@ class CustomScrollbarState extends State with SingleTickerProvi (!_scrollController!.position.isScrollingNotifier.value && _isThumbShown && !_isDragging); void _schedulePossibleThumbHidding() { - plannedHidding = Timer(widget.durationBeforeHide, () { + _plannedHidding = Timer(widget.durationBeforeHide, () { if (_thumbShouldHide()) { _hideThumb(); } @@ -207,21 +264,47 @@ class CustomScrollbarState extends State with SingleTickerProvi return _thumbBuilder(context, _isDragging); }))), - ))) + ))), + Visibility( + visible: false, + maintainSize: true, + maintainAnimation: true, + maintainState: true, + child: IntrinsicWidth( + child: IntrinsicHeight( + child: Container( + key: _prototypeItemKey, + child: widget.prototypeItem ?? Container(), + ), + ), + ), + ), ], ); } - void _onThumbDragged(details) { - final newOffset = _calculateOffset(details, _scrollController!); - _scrollController!.jumpTo(newOffset); + void _onThumbDragged(DragUpdateDetails details) { + final newOffset = _addDragDeltaToOffset(oldOffset: _scrollBarOffset, dragDelta: details.primaryDelta!); + _scrollBarOffset = newOffset; + _updateThumbOffset(); + + if (widget.isFixedScroll && _prototypeHeight != null) { + final closestTopItemOffset = newOffset ~/ _prototypeHeight! * _prototypeHeight!; + final closestBottomItemOffset = (newOffset ~/ _prototypeHeight! + 1) * _prototypeHeight!; + + final newScrollControllerOffset = + closest(newOffset, closestTopItemOffset, closestBottomItemOffset).clamp(_minScrollOffset, _maxScrollOffset!); + + _scrollController!.jumpTo(newScrollControllerOffset); + } else { + _scrollController!.jumpTo(newOffset); + } } - double _calculateOffset(DragUpdateDetails details, ScrollController controller) { - final maxScrollOffset = _scrollController!.position.maxScrollExtent - maxScrollOffsetFromEnd; - final scrollDelta = details.primaryDelta! / _scrollBarHeight; - final oldOffset = max(minScrollOffset, controller.offset); - double newOffset = (oldOffset + scrollDelta * maxScrollOffset).clamp(minScrollOffset, maxScrollOffset); + double _addDragDeltaToOffset({required double oldOffset, required double dragDelta}) { + final absoluteDelta = dragDelta / _scrollBarHeight; + oldOffset = max(_minScrollOffset, oldOffset); + double newOffset = (oldOffset + absoluteDelta * _maxScrollOffset!).clamp(_minScrollOffset, _maxScrollOffset!); return newOffset; } } diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart index be971ca..005c18e 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart @@ -56,7 +56,7 @@ class DownloadTracksCollectionHeader extends StatelessWidget { )); }), Padding( - padding: const EdgeInsets.only(top: 10, left: 15, right: 15), + padding: const EdgeInsets.only(top: 10, left: 10, right: 10), child: Text( title, style: theme.textTheme.titleLarge, diff --git a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart index 3310316..8d631f5 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart @@ -41,13 +41,13 @@ class GradientAppBarWithOpacity extends StatelessWidget { if (isAppBarVisible) { return Opacity( - opacity: opacity, + opacity: normalize(opacity, 0, 0.5).clamp(0, 1), child: AnimatedContainer( duration: const Duration(milliseconds: 700), decoration: BoxDecoration( gradient: LinearGradient(colors: [ - getIntermediateColor(firstColor, secondaryColor, 0.4), - getIntermediateColor(firstColor, secondaryColor, 0.6) + getIntermediateColor(firstColor, secondaryColor, 0.5), + getIntermediateColor(firstColor, secondaryColor, 0.7) ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), ), ); @@ -74,7 +74,7 @@ class GradientAppBarWithOpacity extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 30), child: Opacity( - opacity: opacity, + opacity: normalize(opacity, 0.5, 1).clamp(0, 1), child: Text(title, style: Theme.of(context).textTheme.titleSmall)), ), ), diff --git a/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart b/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart index cd0cc8b..f33598f 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:async/async.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/utils/failures/failure.dart'; @@ -31,7 +30,7 @@ class TrackLoadingObservingCubit extends Cubit { void _onLoadingObserverChanged(LoadingTrackObserver? newLoadingObserver) { _unsubscribeFromLoadingObserver(); _subscribeToLoadingObserver(newLoadingObserver); - _onLoadingObserverEvent(); + _onLoadingTrackStatusChanged(); } void _unsubscribeFromLoadingObserver() { @@ -41,16 +40,11 @@ class TrackLoadingObservingCubit extends Cubit { void _subscribeToLoadingObserver(LoadingTrackObserver? loadingTrackObserver) { if (loadingTrackObserver == null) return; - _loadingObserverSubscription = StreamGroup.merge([ - loadingTrackObserver.startLoadingStream, - loadingTrackObserver.loadingPercentChangedStream, - loadingTrackObserver.loadedStream, - loadingTrackObserver.loadingFailureStream, - loadingTrackObserver.loadingCancelledStream - ]).listen((event) => _onLoadingObserverEvent()); + _loadingObserverSubscription = + loadingTrackObserver.loadingTrackStatusStream.listen((event) => _onLoadingTrackStatusChanged()); } - void _onLoadingObserverEvent() { + void _onLoadingTrackStatusChanged() { if (_trackWithLoadingObserver == null) return; final status = _trackWithLoadingObserver!.loadingObserver?.status; From 671d3b92466159c10682510308db5c7f1c5a38c5 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 30 Jun 2024 22:16:29 +1000 Subject: [PATCH 19/41] fixed custom scrollbar thumb position calculations --- .../download_tracks_collection/widgets/custom_scrollbar.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart b/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart index 237b034..1b11c2a 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart @@ -138,7 +138,7 @@ class CustomScrollbarState extends State with SingleTickerProvi void _updatePrototypeHeight() { if (widget.isFixedScroll) { SchedulerBinding.instance.addPostFrameCallback((_) { - _prototypeHeight = (_prototypeItemKey?.currentContext?.findRenderObject() as RenderBox?)?.size.height; + _prototypeHeight = (_prototypeItemKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; }); } } @@ -304,7 +304,8 @@ class CustomScrollbarState extends State with SingleTickerProvi double _addDragDeltaToOffset({required double oldOffset, required double dragDelta}) { final absoluteDelta = dragDelta / _scrollBarHeight; oldOffset = max(_minScrollOffset, oldOffset); - double newOffset = (oldOffset + absoluteDelta * _maxScrollOffset!).clamp(_minScrollOffset, _maxScrollOffset!); + double newOffset = (oldOffset + (absoluteDelta * (_maxScrollOffset! - _minScrollOffset))) + .clamp(_minScrollOffset, _maxScrollOffset!); return newOffset; } } From f2a88c5e6af6a5f55c9fdaf02758aef7b63850db Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Sun, 30 Jun 2024 22:45:02 +1000 Subject: [PATCH 20/41] another custom scrollbar physic fix add handler for downloadTracks failures --- .../view/download_tracks_collection_screen.dart | 10 +++++++++- .../widgets/custom_scrollbar.dart | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 16e9754..48b28e4 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -144,6 +144,7 @@ class _DownloadTracksCollectionScreenState extends State( + bloc: _downloadTracksCubit, + listener: (context, state) { + if (state is DownloadTracksFailure) { + showSmallTextSnackBar(state.failure.toString(), context); + } + }) ], child: Scaffold( body: Stack( diff --git a/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart b/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart index 1b11c2a..2533015 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart @@ -302,7 +302,7 @@ class CustomScrollbarState extends State with SingleTickerProvi } double _addDragDeltaToOffset({required double oldOffset, required double dragDelta}) { - final absoluteDelta = dragDelta / _scrollBarHeight; + final absoluteDelta = dragDelta / _maxThumbOffset; oldOffset = max(_minScrollOffset, oldOffset); double newOffset = (oldOffset + (absoluteDelta * (_maxScrollOffset! - _minScrollOffset))) .clamp(_minScrollOffset, _maxScrollOffset!); From 9235abae1a99395f17bc2df542c055c66c684974 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Mon, 1 Jul 2024 20:05:07 +1000 Subject: [PATCH 21/41] Created custom bottom navigation bar (added tapping animation) Created wonderful header image animation Added some consts --- lib/core/app/themes/theme_consts.dart | 3 +- .../about_app/view/about_app_screen.dart | 3 +- .../view/change_source_video_screen.dart | 2 +- .../download_tracks_collection_screen.dart | 157 +++++++++--------- ...tom_sliver_persistent_header_delegate.dart | 29 ++++ .../view/download_track_info.dart | 3 +- .../widgets/download_track_info_tile.dart | 3 +- .../download_tracks_collection_header.dart | 135 +++++++++------ ...download_tracks_collection_manage_bar.dart | 51 ++++++ .../widgets/tracks_collection_manage_bar.dart | 48 ------ .../widgets/widgets.dart | 5 +- .../history/view/history_screen.dart | 5 +- .../presentation/home/view/home_screen.dart | 7 +- .../view/loading_tracks_collection_tile.dart | 4 +- .../presentation/main/view/main_screen.dart | 96 +++++------ .../custom_navigation_bar.dart | 3 + .../custom_navigation_bar_class.dart | 59 +++++++ .../custom_navigation_bar_item.dart | 7 + .../custom_navigation_bar_item_tile.dart | 133 +++++++++++++++ .../settings/view/settings_screen.dart | 3 +- pubspec.lock | 8 + pubspec.yaml | 1 + 22 files changed, 516 insertions(+), 249 deletions(-) create mode 100644 lib/features/presentation/download_tracks_collection/widgets/custom_sliver_persistent_header_delegate.dart create mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart create mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar.dart create mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart create mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart create mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart diff --git a/lib/core/app/themes/theme_consts.dart b/lib/core/app/themes/theme_consts.dart index 1fbdf63..3876da4 100644 --- a/lib/core/app/themes/theme_consts.dart +++ b/lib/core/app/themes/theme_consts.dart @@ -1 +1,2 @@ -const backIconSize = 25.0; \ No newline at end of file +const backIconSize = 25.0; +const horizontalPadding = 15.0; \ No newline at end of file diff --git a/lib/features/presentation/about_app/view/about_app_screen.dart b/lib/features/presentation/about_app/view/about_app_screen.dart index 80681b6..423e72a 100644 --- a/lib/features/presentation/about_app/view/about_app_screen.dart +++ b/lib/features/presentation/about_app/view/about_app_screen.dart @@ -2,7 +2,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; -import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @RoutePage() @@ -50,7 +49,7 @@ class AboutAppScreen extends StatelessWidget { SingleChildScrollView( child: Padding( padding: - const EdgeInsets.only(left: homePageHorizontalPadding, right: homePageHorizontalPadding, top: 10), + const EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10), child: Column(children: [ Column( mainAxisAlignment: MainAxisAlignment.start, diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 0749371..9a16986 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -100,7 +100,7 @@ class _ChangeSourceVideoScreenState extends State { .add(ChangeSourceVideoChangeSelectedVideo(selectedVideo: video)), child: Container( color: isVideoSelected ? onSurfaceHighlightColor : Colors.transparent, - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15), + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 48b28e4..0e0b530 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:palette_generator/palette_generator.dart'; @@ -215,90 +216,93 @@ class _DownloadTracksCollectionScreenState extends State _onAllDownloadButtonClicked( + onDownloadAllButtonClicked: () => _onAllDownloadButtonClicked( filterTracksState: _filterTracksBloc.state, getTracksState: getTracksState), - ); - }), - ), - BlocBuilder( - bloc: _filterTracksBloc, - builder: (context, state) { - if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); - - final filteredTracks = state.filteredTracks; - final isTracksPlaceholdersDisplayed = - getTracksState is! GetTracksAllGot && + ), + BlocBuilder( + bloc: _filterTracksBloc, + builder: (context, state) { + if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); + + final filteredTracks = state.filteredTracks; + final isTracksPlaceholdersDisplayed = getTracksState + is! GetTracksAllGot && state.isFilterQueryEmpty && getTracksCollectionState.tracksCollection.tracksCount != null; - return SliverPrototypeExtentList.builder( - itemCount: isTracksPlaceholdersDisplayed - ? getTracksCollectionState.tracksCollection.tracksCount - : filteredTracks.length, - prototypeItem: const Padding( - padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), - child: TrackTilePlaceholder()), - itemBuilder: (context, index) { - return Stack( - children: [ - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), - child: Builder(builder: (buildContext) { - if (index < (state.filteredTracks.length)) { - return TrackTile( - trackWithLoadingObserver: filteredTracks[index], - onDownloadButtonClicked: () => _downloadTracksCubit - .downloadTrack(filteredTracks[index]), - onCancelButtonClicked: () => _downloadTracksCubit - .cancelTrackLoading(filteredTracks[index]), - onMoreInfoClicked: () => - showDownloadTrackInfoBottomSheet( - context, filteredTracks[index]), - ); - } - - return const TrackTilePlaceholder(); - }), - ), - Builder( - builder: (buildContext) { - if (getTracksState is GetTracksAfterPartGotNetworkFailure) { - return Positioned.fill( - child: IgnorePointer( - child: Container( - color: const Color.fromARGB(50, 0, 0, 0), - height: 10, - ), - ), - ); - } - - return Container(); - }, - ) - ], + return SliverPadding( + padding: const EdgeInsets.only(top: 20), + sliver: SliverPrototypeExtentList.builder( + itemCount: isTracksPlaceholdersDisplayed + ? getTracksCollectionState.tracksCollection.tracksCount + : filteredTracks.length, + prototypeItem: const Padding( + padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: TrackTilePlaceholder()), + itemBuilder: (context, index) { + return Stack( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 15, vertical: 7.5), + child: Builder(builder: (buildContext) { + if (index < (state.filteredTracks.length)) { + return TrackTile( + trackWithLoadingObserver: filteredTracks[index], + onDownloadButtonClicked: () => _downloadTracksCubit + .downloadTrack(filteredTracks[index]), + onCancelButtonClicked: () => _downloadTracksCubit + .cancelTrackLoading(filteredTracks[index]), + onMoreInfoClicked: () => + showDownloadTrackInfoBottomSheet( + context, filteredTracks[index]), + ); + } + + return const TrackTilePlaceholder(); + }), + ), + Builder( + builder: (buildContext) { + if (getTracksState + is GetTracksAfterPartGotNetworkFailure) { + return Positioned.fill( + child: IgnorePointer( + child: Container( + color: const Color.fromARGB(50, 0, 0, 0), + height: 10, + ), + ), + ); + } + + return Container(); + }, + ) + ], + ); + }, + ), ); }, - ); - }, - ), - ], - )))) + ), + ], + ); + }); + })))) ]); } } @@ -342,9 +346,9 @@ class _DownloadTracksCollectionScreenState extends State _filterTracksBloc.add(FilterTracksChangeFilterQuery(newQuery: newQuery)); + void _onFilterQueryChanged(String newQuery) => + _filterTracksBloc.add(FilterTracksChangeFilterQuery(newQuery: newQuery)); void _onAllDownloadButtonClicked( {required FilterTracksState filterTracksState, required GetTracksState getTracksState}) { diff --git a/lib/features/presentation/download_tracks_collection/widgets/custom_sliver_persistent_header_delegate.dart b/lib/features/presentation/download_tracks_collection/widgets/custom_sliver_persistent_header_delegate.dart new file mode 100644 index 0000000..baad710 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/custom_sliver_persistent_header_delegate.dart @@ -0,0 +1,29 @@ +import 'dart:math'; +import 'package:flutter/material.dart'; + +class CustomSliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate { + CustomSliverPersistentHeaderDelegate( + {required this.maxHeight, required this.minHeight, required this.child, this.onHeightCalculated}); + + final double minHeight; + final double maxHeight; + final Widget child; + final void Function(double height)? onHeightCalculated; + + @override + double get minExtent => minHeight; + @override + double get maxExtent => maxHeight; + + @override + Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) { + onHeightCalculated?.call(max(minExtent, maxExtent - shrinkOffset)); + + return SizedBox.expand(child: child); + } + + @override + bool shouldRebuild(CustomSliverPersistentHeaderDelegate oldDelegate) { + return maxHeight != oldDelegate.maxHeight || minHeight != oldDelegate.minHeight || child != oldDelegate.child; + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart index 7cc4776..153b28d 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart @@ -6,6 +6,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/track_with_loading_observer.dart'; @@ -66,7 +67,7 @@ class _DownloadTrackInfoState extends State { ), ), Padding( - padding: const EdgeInsets.symmetric(horizontal: 15), + padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), child: Row( children: [ CachedNetworkImage( diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart index 1669bac..8f77dff 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; class DownloadTrackInfoTile extends StatefulWidget { const DownloadTrackInfoTile({ @@ -27,7 +28,7 @@ class _DownloadTrackInfoTileState extends State { highlightColor: onSurfaceHighlightColor, onTap: widget.onTap, child: Padding( - padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), + padding: const EdgeInsets.symmetric(vertical: 15, horizontal: horizontalPadding), child: Row( children: [ widget.iconWidget ?? Container(), diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart index 005c18e..fee5eb1 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart @@ -1,74 +1,109 @@ +import 'dart:math'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:sliver_tools/sliver_tools.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; + class DownloadTracksCollectionHeader extends StatelessWidget { const DownloadTracksCollectionHeader( {super.key, required this.backgroundGradientColor, - required this.title, required this.imageUrl, + required this.title, required this.onFilterQueryChanged, - required this.onAllDownloadButtonClicked}); + required this.onDownloadAllButtonClicked}); final Color backgroundGradientColor; final String imageUrl; final String title; - final void Function(String) onFilterQueryChanged; - final void Function() onAllDownloadButtonClicked; + final void Function(String newQuery) onFilterQueryChanged; + final void Function() onDownloadAllButtonClicked; @override Widget build(BuildContext context) { final theme = Theme.of(context); - return AnimatedContainer( - duration: const Duration(milliseconds: 700), - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - backgroundGradientColor, - backgroundColor, - ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), - padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20, bottom: 20), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 15), - child: Column(children: [ - Builder(builder: (context) { - return Center( - child: Container( - decoration: BoxDecoration(boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.3), - spreadRadius: 7, - blurRadius: 13, + return SliverStack(children: [ + SliverPositioned.fill(child: Builder(builder: (context) { + return AnimatedContainer( + duration: const Duration(milliseconds: 700), + decoration: BoxDecoration( + gradient: LinearGradient(colors: [ + backgroundGradientColor, + backgroundColor, + ], begin: Alignment.topCenter, end: Alignment.bottomCenter)), + ); + })), + SliverPadding( + padding: const EdgeInsets.symmetric(horizontal: 15), + sliver: MultiSliver(children: [ + SliverPersistentHeader( + delegate: CustomSliverPersistentHeaderDelegate( + maxHeight: min(MediaQuery.of(context).size.width, MediaQuery.of(context).size.height) * 0.7, + minHeight: 0, + child: Padding( + padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), + child: LayoutBuilder(builder: (context, constraints) { + final minImageSize = + min(MediaQuery.of(context).size.width, MediaQuery.of(context).size.height) * 0.3; + final imageSize = max(minImageSize, constraints.maxHeight); + + double opacity; + if (imageSize != minImageSize) { + opacity = 1; + } else { + opacity = normalize(constraints.maxHeight, minImageSize / 2, minImageSize).clamp(0, 1); + } + + return Stack(clipBehavior: Clip.none, alignment: Alignment.center, children: [ + Positioned( + width: imageSize, + height: imageSize, + child: Opacity( + opacity: opacity, + child: Container( + decoration: BoxDecoration(boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + spreadRadius: 7, + blurRadius: 13, + ) + ]), + child: CachedNetworkImage( + height: imageSize, + fit: BoxFit.contain, + imageUrl: imageUrl, + placeholder: (context, imageUrl) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + errorWidget: (context, imageUrl, _) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + ), + ), + ), ) - ]), - child: CachedNetworkImage( - width: MediaQuery.of(context).size.width * 0.6, - height: MediaQuery.of(context).size.width * 0.6, - fit: BoxFit.contain, - imageUrl: imageUrl, - placeholder: (context, imageUrl) => - Image.asset('resources/images/another/loading_track_collection_image.png'), - errorWidget: (context, imageUrl, _) => - Image.asset('resources/images/another/loading_track_collection_image.png'), - ), - )); - }), - Padding( - padding: const EdgeInsets.only(top: 10, left: 10, right: 10), - child: Text( - title, - style: theme.textTheme.titleLarge, - maxLines: 2, - textAlign: TextAlign.center, - ), + ]); + })), + )), + SliverPadding( + padding: const EdgeInsets.only(top: 10), + sliver: SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Text( + title, + style: theme.textTheme.titleLarge, + maxLines: 2, + textAlign: TextAlign.center, ), - Padding( - padding: const EdgeInsets.only(top: 30), - child: TracksCollectionManageBar( - onFilterQueryChanged: onFilterQueryChanged, - onAllDownloadButtonClicked: onAllDownloadButtonClicked)), - ]))); + )), + ), + DownloadTracksCollectionManageBar( + onFilterQueryChanged: onFilterQueryChanged, onDownloadAllButtonClicked: onDownloadAllButtonClicked) + ]), + ) + ]); } } diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart new file mode 100644 index 0000000..c429229 --- /dev/null +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/search_text_field.dart'; +import 'package:spotify_downloader/generated/l10n.dart'; + +class DownloadTracksCollectionManageBar extends StatelessWidget { + const DownloadTracksCollectionManageBar({ + super.key, + required this.onFilterQueryChanged, + required this.onDownloadAllButtonClicked, + }); + + final void Function(String newQuery) onFilterQueryChanged; + final void Function() onDownloadAllButtonClicked; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return SliverPadding( + padding: const EdgeInsets.only(top: 30), + sliver: SliverToBoxAdapter( + child: Row( + children: [ + Expanded( + child: SearchTextField( + theme: theme, + onChanged: onFilterQueryChanged, + height: 35, + cornerRadius: 5, + hintText: S.of(context).searchByName, + textStyle: theme.textTheme.bodySmall?.copyWith(color: onPrimaryColor), + hintStyle: theme.textTheme.bodySmall?.copyWith(color: searchFieldHintColor, fontWeight: FontWeight.w700), + ), + ), + Container( + height: 35, + padding: const EdgeInsets.only(left: 10), + child: ElevatedButton( + onPressed: () => onDownloadAllButtonClicked, + style: ButtonStyle( + shape: WidgetStateProperty.all( + RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)))), + child: Text(S.of(context).downloadAll, + style: theme.textTheme.bodySmall!.copyWith(color: onPrimaryColor, fontWeight: FontWeight.w700)), + ), + ) + ], + )), + ); + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart b/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart deleted file mode 100644 index c3fdbb2..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/tracks_collection_manage_bar.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:spotify_downloader/core/app/colors/colors.dart'; -import 'package:spotify_downloader/features/presentation/shared/widgets/search_text_field.dart'; -import 'package:spotify_downloader/generated/l10n.dart'; - -class TracksCollectionManageBar extends StatelessWidget { - final void Function(String newQuery) _onFilterQueryChanged; - final void Function() _onAllDownloadButtonClicked; - - const TracksCollectionManageBar( - {super.key, - required void Function(String) onFilterQueryChanged, - required void Function() onAllDownloadButtonClicked}) - : _onFilterQueryChanged = onFilterQueryChanged, - _onAllDownloadButtonClicked = onAllDownloadButtonClicked; - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - return Row( - children: [ - Expanded( - child: SearchTextField( - theme: theme, - onChanged: _onFilterQueryChanged, - height: 35, - cornerRadius: 5, - hintText: S.of(context).searchByName, - textStyle: theme.textTheme.bodySmall?.copyWith(color: onPrimaryColor), - hintStyle: theme.textTheme.bodySmall?.copyWith(color: searchFieldHintColor, fontWeight: FontWeight.w700), - ), - ), - Container( - height: 35, - width: 150, - padding: const EdgeInsets.only(left: 10), - child: ElevatedButton( - onPressed: _onAllDownloadButtonClicked, - style: ButtonStyle( - shape: WidgetStateProperty.all( - RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)))), - child: Text(S.of(context).downloadAll, style: theme.textTheme.bodySmall!.copyWith(color: onPrimaryColor, fontWeight: FontWeight.w700)), - ), - ) - ], - ); - } -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart index d5480e5..d50b988 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart @@ -1,7 +1,8 @@ export 'custom_scrollbar.dart'; -export 'download_tracks_collection_header.dart'; export 'gradient_app_bar_with_opacity.dart'; export 'network_failure_splash.dart'; export 'track_tile_placeholder.dart'; -export 'tracks_collection_manage_bar.dart'; export 'track_tile/view/track_tile.dart'; +export 'custom_sliver_persistent_header_delegate.dart'; +export 'download_tracks_collection_header.dart'; +export 'download_tracks_collection_manage_bar.dart'; diff --git a/lib/features/presentation/history/view/history_screen.dart b/lib/features/presentation/history/view/history_screen.dart index 9edf044..70fc98b 100644 --- a/lib/features/presentation/history/view/history_screen.dart +++ b/lib/features/presentation/history/view/history_screen.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -39,7 +40,7 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), child: Column(children: [ Container( - padding: const EdgeInsets.symmetric(horizontal: 15), + padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), height: 50, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -69,7 +70,7 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM .then((value) => _historyBloc.add(HistoryBlocLoadHistory())); }, child: Padding( - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15), + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ CachedNetworkImage( width: 70, diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index a8910b3..eee3169 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/liked_tracks_tile.dart'; @@ -11,8 +12,6 @@ import 'package:spotify_downloader/features/presentation/home/widgets/loading_tr import 'package:spotify_downloader/features/presentation/shared/widgets/search_text_field.dart'; import 'package:spotify_downloader/generated/l10n.dart'; -const homePageHorizontalPadding = 15.0; - @RoutePage() class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @@ -39,7 +38,7 @@ class _HomeScreenState extends State { padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), child: Column(children: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: homePageHorizontalPadding), + padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), child: Column( children: [ SizedBox( @@ -126,7 +125,7 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: homePageHorizontalPadding), + padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), child: Text(S.of(context).activeDownloads, style: theme.textTheme.titleMedium), ), Expanded( diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart index 39f6eac..fbdd5e8 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart @@ -4,10 +4,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; -import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; class LoadingTracksCollectionTile extends StatefulWidget { @@ -72,7 +72,7 @@ class _LoadingTracksCollectionTileState extends State with AutoRouteAwareStateMixin { child, Align( alignment: Alignment.bottomCenter, - child: Container( - height: 70, - alignment: Alignment.bottomCenter, - decoration: const BoxDecoration( - gradient: LinearGradient( - colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(200, 0, 0, 0)], - begin: Alignment.topCenter, - end: Alignment.bottomCenter)), - child: Theme( - data: ThemeData( - splashFactory: NoSplash.splashFactory, - highlightColor: const Color.fromARGB(0, 0, 0, 0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.only(left: 20, right: 20, top: 10), + alignment: Alignment.bottomCenter, + decoration: const BoxDecoration( + gradient: LinearGradient( + colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter)), + child: Theme( + data: ThemeData( + splashFactory: NoSplash.splashFactory, + highlightColor: const Color.fromARGB(0, 0, 0, 0), + ), + child: CustomNavigationBar( + iconSize: const Size(25, 25), + labelFontSize: 10, + selectedItemColor: onBackgroundPrimaryColor, + unselectedItemColor: onBackgroundSecondaryColor, + selectingItemColor: onBackgroundThirdRateColor, + selectingSize: 0.9, + animationDuration: const Duration(milliseconds: 50), + currentIndex: tabsRouter.activeIndex, + onTap: (index) => tabsRouter.setActiveIndex(index), + items: [ + CustomNavigationBarItem( + svgIconPath: 'resources/images/svg/bottom_bar/home_icon.svg', + svgActiveIconPath: 'resources/images/svg/bottom_bar/home_icon_active.svg', + label: S.of(context).main), + CustomNavigationBarItem( + svgIconPath: 'resources/images/svg/bottom_bar/history_icon.svg', + svgActiveIconPath: 'resources/images/svg/bottom_bar/history_icon_active.svg', + label: S.of(context).history), + ]), + ), ), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20), - child: BottomNavigationBar( - enableFeedback: false, - selectedFontSize: 10, - unselectedFontSize: 10, - selectedItemColor: onBackgroundPrimaryColor, - unselectedItemColor: onBackgroundSecondaryColor, - elevation: 0, - backgroundColor: Colors.transparent, - currentIndex: tabsRouter.activeIndex, - onTap: (index) => tabsRouter.setActiveIndex(index), - items: [ - BottomNavigationBarItem( - icon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/home_icon.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundSecondaryColor, BlendMode.srcIn), - ), - activeIcon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/home_icon_active.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundPrimaryColor, BlendMode.srcIn), - ), - label: S.of(context).main), - BottomNavigationBarItem( - icon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/history_icon.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundSecondaryColor, BlendMode.srcIn), - ), - activeIcon: SvgPicture.asset( - 'resources/images/svg/bottom_bar/history_icon_active.svg', - height: 25, - width: 25, - colorFilter: const ColorFilter.mode(onBackgroundPrimaryColor, BlendMode.srcIn), - ), - label: S.of(context).history), - ]), - ), - ), + ], ), ), ], diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar.dart b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar.dart new file mode 100644 index 0000000..fb55f31 --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar.dart @@ -0,0 +1,3 @@ +export 'custom_navigation_bar_class.dart'; +export 'custom_navigation_bar_item.dart'; +export 'custom_navigation_bar_item_tile.dart'; diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart new file mode 100644 index 0000000..d14c77c --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart'; + +import 'custom_navigation_bar_item_tile.dart'; + +class CustomNavigationBar extends StatelessWidget { + final List items; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + final void Function(int index) onTap; + final int currentIndex; + + const CustomNavigationBar( + {super.key, + required this.items, + required this.iconSize, + required this.labelFontSize, + required this.selectedItemColor, + required this.unselectedItemColor, + required this.selectingItemColor, + required this.onTap, + required this.currentIndex, + required this.selectingSize, + required this.animationDuration}); + + @override + Widget build(BuildContext context) { + int i = 0; + return Padding( + padding: const EdgeInsets.symmetric(vertical: 7), + child: Row( + children: items.map((item) { + final isSelected = i == currentIndex; + final itemIndex = i; + i++; + + return Expanded( + child: CustomNavigationBarItemTile( + item: item, + iconSize: iconSize, + labelFontSize: labelFontSize, + selectedItemColor: selectedItemColor, + selectingItemColor: selectingItemColor, + selectingSize: selectingSize, + unselectedItemColor: unselectedItemColor, + isSelected: isSelected, + onTap: () => onTap(itemIndex), + animationDuration: animationDuration, + )); + }).toList(), + ), + ); + } +} diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart new file mode 100644 index 0000000..d2faead --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart @@ -0,0 +1,7 @@ +class CustomNavigationBarItem { + CustomNavigationBarItem({required this.svgIconPath, required this.svgActiveIconPath, required this.label}); + + final String svgIconPath; + final String svgActiveIconPath; + final String label; +} diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart new file mode 100644 index 0000000..aa989b4 --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart @@ -0,0 +1,133 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart'; + +class CustomNavigationBarItemTile extends StatefulWidget { + final CustomNavigationBarItem item; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + final void Function() onTap; + final bool isSelected; + + const CustomNavigationBarItemTile( + {super.key, + required this.iconSize, + required this.labelFontSize, + required this.selectingSize, + required this.selectedItemColor, + required this.unselectedItemColor, + required this.selectingItemColor, + required this.onTap, + required this.isSelected, + required this.item, + required this.animationDuration}); + + @override + State createState() => _CustomNavigationBarItemTileState(); +} + + +class _CustomNavigationBarItemTileState extends State with TickerProviderStateMixin { + late final AnimationController _colorAnimationController; + late final AnimationController _sizeAnimationController; + + Animation? sizeAnimation; + Animation? colorAnimation; + + bool isTapping = false; + + Color get initialColor => widget.isSelected ? widget.selectedItemColor : widget.unselectedItemColor; + + @override + void initState() { + super.initState(); + _colorAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); + _sizeAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); + _updateAnimations(); + } + + @override + void didUpdateWidget(covariant CustomNavigationBarItemTile oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.isSelected != widget.isSelected) { + _updateAnimations(); + } + } + + void _updateAnimations() { + final beginColor = colorAnimation?.value ?? initialColor; + final endColor = isTapping + ? widget.selectingItemColor + : widget.isSelected + ? widget.selectedItemColor + : widget.unselectedItemColor; + + final double beginSize = sizeAnimation?.value ?? 1; + final double endSize = isTapping ? widget.selectingSize : 1; + + if (beginColor != endColor || colorAnimation == null) { + _colorAnimationController.reset(); + colorAnimation = ColorTween(begin: beginColor, end: endColor).animate(_colorAnimationController); + _colorAnimationController.forward(); + } + + if (beginSize != endSize || sizeAnimation == null) { + _sizeAnimationController.reset(); + sizeAnimation = Tween(begin: beginSize, end: endSize).animate(_sizeAnimationController); + _sizeAnimationController.forward(); + } + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTapDown: (details) { + isTapping = true; + _updateAnimations(); + }, + onTapUp: (details) { + isTapping = false; + widget.onTap(); + _updateAnimations(); + }, + onTapCancel: () { + isTapping = false; + _updateAnimations(); + }, + child: AnimatedBuilder( + animation: sizeAnimation!, + builder: (context, _) { + return AnimatedBuilder( + animation: colorAnimation!, + builder: (context, _) { + return Align( + alignment: Alignment.bottomCenter, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 5), + color: Colors.transparent, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset( + widget.isSelected ? widget.item.svgActiveIconPath : widget.item.svgIconPath, + width: widget.iconSize.width * sizeAnimation!.value, + height: widget.iconSize.height * sizeAnimation!.value, + colorFilter: ColorFilter.mode(colorAnimation!.value!, BlendMode.srcIn), + ), + Text(widget.item.label, + style: TextStyle( + color: colorAnimation!.value, fontSize: widget.labelFontSize * sizeAnimation!.value)) + ], + ), + ), + ); + }); + })); + } +} + diff --git a/lib/features/presentation/settings/view/settings_screen.dart b/lib/features/presentation/settings/view/settings_screen.dart index 80ca543..c125905 100644 --- a/lib/features/presentation/settings/view/settings_screen.dart +++ b/lib/features/presentation/settings/view/settings_screen.dart @@ -4,7 +4,6 @@ import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; -import 'package:spotify_downloader/features/presentation/home/view/home_screen.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -56,7 +55,7 @@ class _SettingsScreenState extends State { Expanded( child: SingleChildScrollView( child: Padding( - padding: const EdgeInsets.only(left: homePageHorizontalPadding, right: homePageHorizontalPadding, top: 10), + padding: const EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10), child: Column(mainAxisSize: MainAxisSize.min, children: [ const AuthSettings(), const DownloadTracksSettingsEditor(), diff --git a/pubspec.lock b/pubspec.lock index 3ed0787..b839ec5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1010,6 +1010,14 @@ packages: description: flutter source: sdk version: "0.0.99" + sliver_tools: + dependency: "direct main" + description: + name: sliver_tools + sha256: eae28220badfb9d0559207badcbbc9ad5331aac829a88cb0964d330d2a4636a6 + url: "https://pub.dev" + source: hosted + version: "0.2.12" source_gen: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f9e717b..42772bd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,6 +42,7 @@ dependencies: flutter_background: ^1.2.0 flexible_scrollbar: ^0.1.3 async: ^2.11.0 + sliver_tools: ^0.2.12 dev_dependencies: flutter_test: From 5cf08734534000d5c36fb48f3e05820188275611 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Tue, 2 Jul 2024 19:22:43 +1000 Subject: [PATCH 22/41] add bottom navigation bar for all screens litle design changes --- lib/core/app/router/router.dart | 49 ++-- lib/core/app/spotify_downloader_app.dart | 6 +- lib/core/app/themes/theme_consts.dart | 6 +- lib/core/app/themes/themes.dart | 26 ++ .../about_app/view/about_app_screen.dart | 169 +++++-------- .../view/change_source_video_screen.dart | 227 +++++++----------- .../download_tracks_collection_screen.dart | 17 +- .../view/download_track_info.dart | 4 +- .../download_tracks_collection_header.dart | 2 +- ...download_tracks_collection_manage_bar.dart | 2 +- .../gradient_app_bar_with_opacity.dart | 4 +- .../widgets/widgets.dart | 4 +- .../history/view/history_screen.dart | 149 ++++++------ .../presentation/home/view/home_screen.dart | 192 +++++++-------- .../view/loading_tracks_collections_list.dart | 75 +++--- .../view/loading_tracks_collection_tile.dart | 3 +- .../tools/bottom_navigation_bar_observer.dart | 23 ++ .../presentation/main/view/main_screen.dart | 184 +++++++++----- .../custom_bottom_navigation_bar.dart | 4 + .../custom_bottom_navigation_bar_acessor.dart | 15 ++ .../custom_bottom_navigation_bar_class.dart} | 12 +- .../custom_bottom_navigation_bar_item.dart | 7 + ...stom_bottom_navigation_bar_item_tile.dart} | 14 +- .../custom_navigation_bar.dart | 3 - .../custom_navigation_bar_item.dart | 7 - .../settings/view/settings_screen.dart | 103 +++----- .../shared/widgets/custom_app_bar.dart | 47 ++++ ...tom_navigation_bar_list_view_expander.dart | 11 + .../shared/widgets/custom_main_app_bar.dart | 29 +++ ...tom_sliver_persistent_header_delegate.dart | 0 .../widgets/network_failure_splash.dart | 0 .../widgets/screen_with_custom_app_bar.dart | 26 ++ .../presentation/shared/widgets/widgets.dart | 8 + 33 files changed, 781 insertions(+), 647 deletions(-) create mode 100644 lib/features/presentation/main/tools/bottom_navigation_bar_observer.dart create mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart create mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart rename lib/features/presentation/main/widgets/{custom_navigation_bar/custom_navigation_bar_class.dart => custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart} (82%) create mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart rename lib/features/presentation/main/widgets/{custom_navigation_bar/custom_navigation_bar_item_tile.dart => custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart} (88%) delete mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar.dart delete mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart create mode 100644 lib/features/presentation/shared/widgets/custom_app_bar.dart create mode 100644 lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart create mode 100644 lib/features/presentation/shared/widgets/custom_main_app_bar.dart rename lib/features/presentation/{download_tracks_collection => shared}/widgets/custom_sliver_persistent_header_delegate.dart (100%) rename lib/features/presentation/{download_tracks_collection => shared}/widgets/network_failure_splash.dart (100%) create mode 100644 lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart create mode 100644 lib/features/presentation/shared/widgets/widgets.dart diff --git a/lib/core/app/router/router.dart b/lib/core/app/router/router.dart index af92583..a7daf3e 100644 --- a/lib/core/app/router/router.dart +++ b/lib/core/app/router/router.dart @@ -1,5 +1,6 @@ import 'package:auto_route/auto_route.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/about_app/view/about_app_screen.dart'; @@ -10,21 +11,33 @@ import 'package:spotify_downloader/features/presentation/main/view/main_screen.d import 'package:spotify_downloader/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart'; import 'package:spotify_downloader/features/presentation/settings/view/settings_screen.dart'; -part 'router.gr.dart'; - -@AutoRouterConfig() -class AppRouter extends _$AppRouter { - - @override +part 'router.gr.dart'; + +@AutoRouterConfig() +class AppRouter extends _$AppRouter { + @override List get routes => [ - AutoRoute(page: MainRoute.page, path: '/', children: [ - AutoRoute(page: HomeRoute.page, path: 'home'), - AutoRoute(page: HistoryRoute.page, path: 'history'), - ]), - AutoRoute(page: DownloadTracksCollectionRouteWithHistoryTracksCollection.page), - AutoRoute(page: DownloadTracksCollectionRouteWithUrl.page), - AutoRoute(page: ChangeSourceVideoRoute.page), - AutoRoute(page: SettingsRoute.page), - AutoRoute(page: AboutAppRoute.page) - ]; - } \ No newline at end of file + AutoRoute(page: MainRoute.page, path: '/', children: [ + RedirectRoute(path: '', redirectTo: 'home'), + CustomRoute( + page: HomeRoute.page, + path: 'home', + transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground), + CustomRoute(page: HistoryRoute.page, path: 'history', transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground), + CustomRoute( + page: DownloadTracksCollectionRouteWithHistoryTracksCollection.page, + path: 'downloadTracksCollectionFromHistory', + transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground), + CustomRoute( + page: DownloadTracksCollectionRouteWithUrl.page, + path: 'downloadTracksCollectionFromUrl', + transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground), + CustomRoute( + page: ChangeSourceVideoRoute.page, + path: 'changeSourceVideo', + transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground), + CustomRoute(page: SettingsRoute.page, path: 'settings', transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground), + CustomRoute(page: AboutAppRoute.page, path: 'about', transitionsBuilder: TransitionsBuildersExtension.fadeInWithBackground) + ]), + ]; +} \ No newline at end of file diff --git a/lib/core/app/spotify_downloader_app.dart b/lib/core/app/spotify_downloader_app.dart index 57ba39d..f2ea131 100644 --- a/lib/core/app/spotify_downloader_app.dart +++ b/lib/core/app/spotify_downloader_app.dart @@ -26,7 +26,7 @@ class _SpotifyDownloaderAppState extends State { @override void initState() { super.initState(); - + if (widget.locale != null) { _language = widget.locale!; } @@ -46,6 +46,10 @@ class _SpotifyDownloaderAppState extends State { supportedLocales: S.delegate.supportedLocales, routerConfig: _appRouter.config(navigatorObservers: () => [AutoRouteObserver()]), theme: mainTheme, + builder: (context, child) { + return ScrollConfiguration( + behavior: const ClampingScrollPhysicsBehavior().copyWith(overscroll: false), child: child!); + }, ); } diff --git a/lib/core/app/themes/theme_consts.dart b/lib/core/app/themes/theme_consts.dart index 3876da4..dca4222 100644 --- a/lib/core/app/themes/theme_consts.dart +++ b/lib/core/app/themes/theme_consts.dart @@ -1,2 +1,6 @@ +import 'package:flutter/material.dart'; + const backIconSize = 25.0; -const horizontalPadding = 15.0; \ No newline at end of file +const horizontalPadding = 15.0; +const appBarHeight = 55.0; +const screenWithCustomAppBarPadding = EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10); \ No newline at end of file diff --git a/lib/core/app/themes/themes.dart b/lib/core/app/themes/themes.dart index f4b5c13..20852e1 100644 --- a/lib/core/app/themes/themes.dart +++ b/lib/core/app/themes/themes.dart @@ -118,3 +118,29 @@ void showSmallTextSnackBar(String message, BuildContext context, [Duration durat duration: duration, )); } + +class TransitionsBuildersExtension { + static const fadeInWithBackground = _fadeInWithBackground; + + static Widget _fadeInWithBackground( + BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { + if (animation.status == AnimationStatus.reverse) { + return FadeTransition( + opacity: animation, child: Container(constraints: const BoxConstraints.expand(), color: backgroundColor)); + } else { + return Container( + constraints: const BoxConstraints.expand(), + color: backgroundColor, + child: FadeTransition(opacity: animation, child: child), + ); + } + } +} + +class ClampingScrollPhysicsBehavior extends ScrollBehavior { + const ClampingScrollPhysicsBehavior(); + @override + ScrollPhysics getScrollPhysics(BuildContext context) { + return const ClampingScrollPhysics(); + } +} diff --git a/lib/features/presentation/about_app/view/about_app_screen.dart b/lib/features/presentation/about_app/view/about_app_screen.dart index 423e72a..e99b8d0 100644 --- a/lib/features/presentation/about_app/view/about_app_screen.dart +++ b/lib/features/presentation/about_app/view/about_app_screen.dart @@ -1,7 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @RoutePage() @@ -12,114 +11,68 @@ class AboutAppScreen extends StatelessWidget { Widget build(BuildContext context) { final theme = Theme.of(context); - return Scaffold( - body: Column(children: [ - SizedBox( - height: 55 + MediaQuery.of(context).viewPadding.top, - child: Padding( - padding: EdgeInsets.only( - top: MediaQuery.of(context).viewPadding.top, - ), - child: Row( - children: [ - IconButton( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - onPressed: () { - AutoRouter.of(context).pop(); - }, - icon: SvgPicture.asset( - 'resources/images/svg/back_icon.svg', - height: backIconSize, - width: backIconSize, - )), - Padding( - padding: const EdgeInsets.only(left: 10), - child: Text( - S.of(context).aboutApp, - style: theme.textTheme.titleSmall, - )), - ], - ), + return ScrollableScreenWithCustomAppBar( + title: S.of(context).aboutApp, + body: Column(children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Align( + alignment: Alignment.bottomLeft, + child: Text( + S.of(context).developed, + style: theme.textTheme.bodyLarge, + )), + Container( + alignment: Alignment.topLeft, + padding: const EdgeInsets.only(top: 10), + child: const Text('C0ntrolDev'), + ), + ], ), - ), - Expanded( - child: Stack( - children: [ - SingleChildScrollView( - child: Padding( - padding: - const EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10), - child: Column(children: [ - Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Align( - alignment: Alignment.bottomLeft, - child: Text( - S.of(context).developed, - style: theme.textTheme.bodyLarge, - )), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.only(top: 10), - child: const Text('C0ntrolDev'), - ), - ], + Container( + padding: const EdgeInsets.only(top: 20), + alignment: Alignment.topLeft, + child: Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Text( + S.of(context).specialThanks, + style: theme.textTheme.bodyLarge, + ), ), Container( - padding: const EdgeInsets.only(top: 20), - alignment: Alignment.topLeft, - child: Column( - children: [ - Align( - alignment: Alignment.topLeft, - child: Text( - S.of(context).specialThanks, - style: theme.textTheme.bodyLarge, - ), - ), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.only(top: 10), - child: Text( - 'w1mo', - style: theme.textTheme.bodyMedium?.copyWith(fontWeight: FontWeight.w700), - ), - ), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.only(top: 10), - child: Text('Hexer10 - youtube_explode_dart', style: theme.textTheme.bodyMedium), - ), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.only(top: 10), - child: Text('rinukkusu - spotify-dart', style: theme.textTheme.bodyMedium), - ), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.only(top: 10), - child: Text('arthenica - ffmpeg-kit', style: theme.textTheme.bodyMedium), - ), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.only(top: 10), - child: Text('Flutter community', style: theme.textTheme.bodyMedium), - ), - ], - )) - ]), - ), - ), - Container( - padding: const EdgeInsets.only(bottom: 5), - alignment: Alignment.bottomCenter, - child: const Text('^_^'), - ), - ], - )) - ]), - ); + alignment: Alignment.topLeft, + padding: const EdgeInsets.only(top: 10), + child: Text( + 'w1mo', + style: theme.textTheme.bodyMedium?.copyWith(fontWeight: FontWeight.w700), + ), + ), + Container( + alignment: Alignment.topLeft, + padding: const EdgeInsets.only(top: 10), + child: Text('Hexer10 - youtube_explode_dart', style: theme.textTheme.bodyMedium), + ), + Container( + alignment: Alignment.topLeft, + padding: const EdgeInsets.only(top: 10), + child: Text('rinukkusu - spotify-dart', style: theme.textTheme.bodyMedium), + ), + Container( + alignment: Alignment.topLeft, + padding: const EdgeInsets.only(top: 10), + child: Text('arthenica - ffmpeg-kit', style: theme.textTheme.bodyMedium), + ), + Container( + alignment: Alignment.topLeft, + padding: const EdgeInsets.only(top: 10), + child: Text('Flutter community', style: theme.textTheme.bodyMedium), + ), + ], + )), + const CustomBottomNavigationBarListViewExpander() + ])); } } diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 9a16986..560aafb 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -1,14 +1,13 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; -import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @RoutePage() @@ -36,146 +35,104 @@ class _ChangeSourceVideoScreenState extends State { final theme = Theme.of(context); return PopScope( - canPop: false, - onPopInvoked: (bool didPop) { - if (didPop) return; - popPage(context); - }, - child: Scaffold( - resizeToAvoidBottomInset: false, - body: BlocListener( - bloc: _changeSourceVideoBloc, - listener: (context, state) { - if (state is ChangeSourceVideoFailure) { - showSmallTextSnackBar(state.failure?.message.toString() ?? '', context); - } - }, - child: Column( - children: [ - SizedBox( - height: 55 + MediaQuery.of(context).viewPadding.top, - child: Padding( - padding: EdgeInsets.only( - top: MediaQuery.of(context).viewPadding.top, - ), - child: Row( - children: [ - IconButton( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - onPressed: () { - popPage(context); - }, - icon: SvgPicture.asset( - 'resources/images/svg/back_icon.svg', - height: backIconSize, - width: backIconSize, - )), - Padding( - padding: const EdgeInsets.only(left: 10), - child: Text( - S.of(context).changeTheDownloadSource, - style: theme.textTheme.titleSmall, - )), - ], - ), - ), - ), - Expanded( - child: BlocBuilder( - bloc: _changeSourceVideoBloc, - builder: (context, state) { - if (state is ChangeSourceVideoLoaded) { - return ListView.builder( - padding: EdgeInsets.zero, - itemCount: state.videos.length, - itemBuilder: (context, index) { - final video = state.videos[index]; - final isVideoSelected = video == state.selectedVideo; + canPop: false, + onPopInvoked: (bool didPop) { + if (didPop) return; + popPage(context); + }, + child: Column( + children: [ + CustomAppBar( + title: S.of(context).changeTheDownloadSource, + ), + Expanded( + child: BlocConsumer( + bloc: _changeSourceVideoBloc, + listener: (context, state) { + if (state is ChangeSourceVideoFailure) { + showSmallTextSnackBar(state.failure?.message.toString() ?? '', context); + } + }, + builder: (context, state) { + if (state is ChangeSourceVideoLoaded) { + return CustomScrollView( + slivers: [ + SliverList.builder( + itemCount: state.videos.length, + itemBuilder: (context, index) { + final video = state.videos[index]; + final isVideoSelected = video == state.selectedVideo; - return InkWell( - splashColor: onSurfaceSplashColor, - highlightColor: onSurfaceHighlightColor, - onTap: () => _changeSourceVideoBloc - .add(ChangeSourceVideoChangeSelectedVideo(selectedVideo: video)), - child: Container( - color: isVideoSelected ? onSurfaceHighlightColor : Colors.transparent, - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Image.network( - video.thumbnailUrl, - height: 80, - width: 100, - fit: BoxFit.fitHeight, - ), - Expanded( - child: Container( - padding: const EdgeInsets.only(left: 10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - video.title, - style: theme.textTheme.bodyMedium, - ), - Text( - S.of(context).nView(formatViewsCount(video.viewsCount)), - style: theme.textTheme.labelMedium - ?.copyWith(color: onBackgroundSecondaryColor), - ), - Padding( - padding: const EdgeInsets.only(top: 5), - child: Text( - video.author, - style: theme.textTheme.bodyMedium + return InkWell( + splashColor: onSurfaceSplashColor, + highlightColor: onSurfaceHighlightColor, + onTap: () => _changeSourceVideoBloc + .add(ChangeSourceVideoChangeSelectedVideo(selectedVideo: video)), + child: Container( + color: isVideoSelected ? onSurfaceHighlightColor : Colors.transparent, + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.network( + video.thumbnailUrl, + height: 80, + width: 100, + fit: BoxFit.fitHeight, + ), + Expanded( + child: Container( + padding: const EdgeInsets.only(left: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + video.title, + style: theme.textTheme.bodyMedium, + ), + Text( + S.of(context).nView(formatViewsCount(video.viewsCount)), + style: theme.textTheme.labelMedium ?.copyWith(color: onBackgroundSecondaryColor), ), - ) - ], + Padding( + padding: const EdgeInsets.only(top: 5), + child: Text( + video.author, + style: theme.textTheme.bodyMedium + ?.copyWith(color: onBackgroundSecondaryColor), + ), + ) + ], + ), ), - ), - ) - ], - )), - ); - }); - } + ) + ], + )), + ); + }), + const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) + ], + ); + } - if (state is ChangeSourceVideoNetworkFailure) { - return Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - S.of(context).theresSomethingWrongWithConnection, - style: theme.textTheme.titleLarge, - ), - TextButton( - style: TextButton.styleFrom(foregroundColor: primaryColor), - onPressed: () {}, - child: Text( - S.of(context).tryAgain, - style: theme.textTheme.bodyMedium?.copyWith(color: primaryColor), - )) - ], - )); - } + if (state is ChangeSourceVideoNetworkFailure) { + return NetworkFailureSplash( + onRetryAgainButtonClicked: () => _changeSourceVideoBloc + .add(ChangeSourceVideoLoad(selectedVideoUrl: widget.track.youtubeUrl))); + } - if (state is ChangeSourceVideoLoading) { - return const Center(child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); - } + if (state is ChangeSourceVideoLoading) { + return const Center( + child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); + } - return Container(); - }, - ), - ) - ], - ), - ), - ), - ); + return Container(); + }, + ), + ) + ], + )); } void popPage(BuildContext context) { diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 0e0b530..caef269 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -7,6 +7,7 @@ import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:palette_generator/palette_generator.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/utils/utils.dart'; @@ -14,7 +15,8 @@ import 'package:spotify_downloader/features/data_domain/tracks_collections/histo import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; -import 'package:spotify_downloader/features/presentation/shared/widgets/strange_optimized_circular_progress_indicator.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -56,7 +58,6 @@ class _DownloadTracksCollectionScreenState extends State _appBarOpacityChangedController = StreamController(); - double get appBarHeightWithViewPadding => _appBarHeight + (MediaQuery.maybeOf(context)?.viewPadding.top ?? 0); + double get appBarHeightWithViewPadding => appBarHeight + (MediaQuery.maybeOf(context)?.viewPadding.top ?? 0); @override void initState() { @@ -201,7 +202,7 @@ class _DownloadTracksCollectionScreenState extends State _onAllDownloadButtonClicked( + onDownloadAllButtonClicked: () => _onDownloadAllButtonClicked( filterTracksState: _filterTracksBloc.state, getTracksState: getTracksState), ), @@ -299,6 +300,7 @@ class _DownloadTracksCollectionScreenState extends State _filterTracksBloc.add(FilterTracksChangeFilterQuery(newQuery: newQuery)); - void _onAllDownloadButtonClicked( + void _onDownloadAllButtonClicked( {required FilterTracksState filterTracksState, required GetTracksState getTracksState}) { if (filterTracksState is! FilterTracksChanged) { return; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart index 153b28d..4516749 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart @@ -13,6 +13,7 @@ import 'package:spotify_downloader/features/data_domain/tracks/services/entities import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_status_tile/view/download_track_info_status_tile.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/widgets/download_track_info_tile.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; void showDownloadTrackInfoBottomSheet(BuildContext context, TrackWithLoadingObserver trackWithLoadingObserver) { @@ -154,7 +155,8 @@ class _DownloadTrackInfoState extends State { trackWithLoadingObserver: widget.trackWithLoadingObserver, newYoutubeUrl: changedUrl); } }, - ) + ), + const CustomBottomNavigationBarListViewExpander() ])), ), const Positioned.fill( diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart index fee5eb1..4c8fa50 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart @@ -48,7 +48,7 @@ class DownloadTracksCollectionHeader extends StatelessWidget { padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), child: LayoutBuilder(builder: (context, constraints) { final minImageSize = - min(MediaQuery.of(context).size.width, MediaQuery.of(context).size.height) * 0.3; + min(MediaQuery.of(context).size.width, MediaQuery.of(context).size.height) * 0.2; final imageSize = max(minImageSize, constraints.maxHeight); double opacity; diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart index c429229..a123b28 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_manage_bar.dart @@ -36,7 +36,7 @@ class DownloadTracksCollectionManageBar extends StatelessWidget { height: 35, padding: const EdgeInsets.only(left: 10), child: ElevatedButton( - onPressed: () => onDownloadAllButtonClicked, + onPressed: onDownloadAllButtonClicked, style: ButtonStyle( shape: WidgetStateProperty.all( RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)))), diff --git a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart index 8d631f5..da8555a 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/gradient_app_bar_with_opacity.dart @@ -11,11 +11,11 @@ class GradientAppBarWithOpacity extends StatelessWidget { required this.firstColor, required this.secondaryColor, this.opacity = 0, - this.height = 55, + this.height = appBarHeight, this.iconSize = backIconSize}) : isAppBarVisible = true; - const GradientAppBarWithOpacity.invisible({super.key, this.height = 55, this.iconSize = backIconSize}) + const GradientAppBarWithOpacity.invisible({super.key, this.height = appBarHeight, this.iconSize = backIconSize}) : isAppBarVisible = false, opacity = 0, title = '', diff --git a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart index d50b988..76e6e29 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart @@ -1,8 +1,8 @@ export 'custom_scrollbar.dart'; export 'gradient_app_bar_with_opacity.dart'; -export 'network_failure_splash.dart'; +export '../../shared/widgets/network_failure_splash.dart'; export 'track_tile_placeholder.dart'; export 'track_tile/view/track_tile.dart'; -export 'custom_sliver_persistent_header_delegate.dart'; +export '../../shared/widgets/custom_sliver_persistent_header_delegate.dart'; export 'download_tracks_collection_header.dart'; export 'download_tracks_collection_manage_bar.dart'; diff --git a/lib/features/presentation/history/view/history_screen.dart b/lib/features/presentation/history/view/history_screen.dart index 70fc98b..e9842a3 100644 --- a/lib/features/presentation/history/view/history_screen.dart +++ b/lib/features/presentation/history/view/history_screen.dart @@ -7,6 +7,7 @@ import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @RoutePage() @@ -21,12 +22,8 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM final HistoryBloc _historyBloc = injector.get(); @override - void didInitTabRoute(TabPageRoute? previousRoute) { - _historyBloc.add(HistoryBlocLoadHistory()); - } - - @override - void didChangeTabRoute(TabPageRoute previousRoute) { + void initState() { + super.initState(); _historyBloc.add(HistoryBlocLoadHistory()); } @@ -37,84 +34,80 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM return Scaffold( resizeToAvoidBottomInset: false, body: Padding( - padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), - child: Column(children: [ - Container( - padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), - height: 50, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [Text(S.of(context).searchHistory, style: theme.textTheme.titleLarge)], + padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), + child: CustomMainAppBar(title: S.of(context).searchHistory), ), - ), - Expanded( - child: BlocBuilder( - bloc: _historyBloc, - builder: (context, state) { - if (state is HistoryBlocLoaded) { - return Padding( - padding: const EdgeInsets.only(top: 20), - child: CustomScrollView( - slivers: [ - SliverList.builder( - itemCount: state.historyTracksCollections.length, - itemBuilder: (context, index) { - final historyTracksCollection = state.historyTracksCollections[index]; - return InkWell( - splashColor: onSurfaceSplashColor, - highlightColor: onSurfaceHighlightColor, - onTap: () async { - AutoRouter.of(context) - .push(DownloadTracksCollectionRouteWithHistoryTracksCollection( - historyTracksCollection: historyTracksCollection)) - .then((value) => _historyBloc.add(HistoryBlocLoadHistory())); - }, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), - child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ - CachedNetworkImage( - width: 70, - height: 70, - fit: BoxFit.fitWidth, - memCacheWidth: (70 * MediaQuery.of(context).devicePixelRatio).round(), - imageUrl: historyTracksCollection.imageUrl ?? '', - placeholder: (context, imageUrl) => - Image.asset('resources/images/another/loading_track_collection_image.png'), - errorWidget: (context, imageUrl, _) => - Image.asset('resources/images/another/loading_track_collection_image.png'), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Text( - historyTracksCollection.name, - style: theme.textTheme.bodyMedium, - ), + Expanded( + child: CustomScrollView(slivers: [ + BlocBuilder( + bloc: _historyBloc, + builder: (context, state) { + if (state is HistoryBlocLoaded) { + return SliverList.builder( + itemCount: state.historyTracksCollections.length, + itemBuilder: (context, index) { + final historyTracksCollection = state.historyTracksCollections[index]; + return InkWell( + splashColor: onSurfaceSplashColor, + highlightColor: onSurfaceHighlightColor, + onTap: () async { + AutoRouter.of(context) + .push(DownloadTracksCollectionRouteWithHistoryTracksCollection( + historyTracksCollection: historyTracksCollection)) + .then((value) => _historyBloc.add(HistoryBlocLoadHistory())); + }, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), + child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ + CachedNetworkImage( + width: 70, + height: 70, + fit: BoxFit.fitWidth, + memCacheWidth: (70 * MediaQuery.of(context).devicePixelRatio).round(), + imageUrl: historyTracksCollection.imageUrl ?? '', + placeholder: (context, imageUrl) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + errorWidget: (context, imageUrl, _) => + Image.asset('resources/images/another/loading_track_collection_image.png'), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Text( + historyTracksCollection.name, + style: theme.textTheme.bodyMedium, ), ), - Container( - alignment: Alignment.centerRight, - child: const Icon(Icons.arrow_forward_ios_rounded, - color: onBackgroundSecondaryColor, size: 27), - ) - ]), - ), - ); - }), - ], - ), - ); - } + ), + Container( + alignment: Alignment.centerRight, + child: const Icon(Icons.arrow_forward_ios_rounded, + color: onBackgroundSecondaryColor, size: 27), + ) + ]), + ), + ); + }); + } - if (state is HistoryBlocLoading) { - return const Center(child: CircularProgressIndicator()); - } + if (state is HistoryBlocLoading) { + return const SliverFillRemaining(child: Center(child: CircularProgressIndicator())); + } - return Container(); - }, + return Container(); + }, + ), + const SliverToBoxAdapter( + child: CustomBottomNavigationBarListViewExpander(), + ) + ]), ), - ) - ]), + ], + ), ), ); } diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index eee3169..30eee0a 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -1,17 +1,19 @@ import 'package:auto_route/auto_route.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; -import 'package:flutter_svg/flutter_svg.dart'; +import 'package:sliver_tools/sliver_tools.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/app/themes/themes.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/liked_tracks_tile.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart'; -import 'package:spotify_downloader/features/presentation/shared/widgets/search_text_field.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; + @RoutePage() class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @@ -33,115 +35,105 @@ class _HomeScreenState extends State { Widget build(BuildContext context) { final theme = Theme.of(context); return Scaffold( - resizeToAvoidBottomInset: false, - body: Padding( - padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top + 20), - child: Column(children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), + resizeToAvoidBottomInset: false, + body: Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).viewPadding.top, left: horizontalPadding, right: horizontalPadding), child: Column( children: [ - SizedBox( - height: 50, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('SpotifyDownloader', style: theme.textTheme.titleLarge), - IconButton( - onPressed: () { - AutoRouter.of(context).push(const SettingsRoute()); - }, - icon: SvgPicture.asset( - 'resources/images/svg/settings_icon.svg', - height: 27, - width: 27, - )) - ], - ), + CustomMainAppBar( + title: 'SpotifyDownloader', + icon: IconButton( + onPressed: () { + AutoRouter.of(context).push(const SettingsRoute()); + }, + icon: SvgPicture.asset( + 'resources/images/svg/settings_icon.svg', + height: 27, + width: 27, + )), ), - Padding( - padding: const EdgeInsets.only(top: 30), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(S.of(context).downloadFromLink, style: theme.textTheme.titleMedium), - Padding( - padding: const EdgeInsets.only(top: 10), - child: SearchTextField( - theme: theme, - height: 45, - iconPadding: const EdgeInsets.all(10), - hintText: S.of(context).downloadFromLinkTextFieldHintText, - controller: searchTextFieldController, - onSubmitted: (value) async { - if (isSearchRequestValid(value)) { - await AutoRouter.of(context).push(DownloadTracksCollectionRouteWithUrl(url: value)); - searchTextFieldController.clear(); - } else if (value != '') { - searchTextFieldController.clear(); - showBigTextSnackBar(S.of(context).incorrectLink, context); - } - }, + Expanded( + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: const EdgeInsets.only(top: 20), + sliver: SliverToBoxAdapter( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(S.of(context).downloadFromLink, style: theme.textTheme.titleMedium), + Padding( + padding: const EdgeInsets.only(top: 10), + child: SearchTextField( + theme: theme, + height: 45, + iconPadding: const EdgeInsets.all(10), + hintText: S.of(context).downloadFromLinkTextFieldHintText, + controller: searchTextFieldController, + onSubmitted: (value) async { + if (isSearchRequestValid(value)) { + await AutoRouter.of(context) + .push(DownloadTracksCollectionRouteWithUrl(url: value)); + searchTextFieldController.clear(); + } else if (value != '') { + searchTextFieldController.clear(); + showBigTextSnackBar(S.of(context).incorrectLink, context); + } + }, + ), + ), + ], + ), ), ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: 40), - child: Align( - alignment: Alignment.topLeft, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(S.of(context).downloadLikedTracks, style: theme.textTheme.titleMedium), - Padding( - padding: const EdgeInsets.only(top: 10), - child: LikedTracksTile( - theme: theme, - title: S.of(context).likedTracksTitle, - onTapped: () { - AutoRouter.of(context).push(DownloadTracksCollectionRouteWithHistoryTracksCollection( - historyTracksCollection: HistoryTracksCollection.likedTracks)); - }, - image: const CachedNetworkImageProvider( - 'https://misc.scdn.co/liked-songs/liked-songs-300.png', + SliverPadding( + padding: const EdgeInsets.only(top: 40), + sliver: SliverToBoxAdapter( + child: Align( + alignment: Alignment.topLeft, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(S.of(context).downloadLikedTracks, style: theme.textTheme.titleMedium), + Padding( + padding: const EdgeInsets.only(top: 10), + child: LikedTracksTile( + theme: theme, + title: S.of(context).likedTracksTitle, + onTapped: () { + AutoRouter.of(context).push( + DownloadTracksCollectionRouteWithHistoryTracksCollection( + historyTracksCollection: HistoryTracksCollection.likedTracks)); + }, + image: const CachedNetworkImageProvider( + 'https://misc.scdn.co/liked-songs/liked-songs-300.png', + ), + ), + ), + ], ), ), ), - ], - ), + ), + SliverPadding( + padding: const EdgeInsets.only(top: 40), + sliver: MultiSliver( + children: [ + SliverToBoxAdapter( + child: Text(S.of(context).activeDownloads, style: theme.textTheme.titleMedium), + ), + const SliverPadding( + padding: EdgeInsets.only(top: 10), sliver: LoadingTracksCollectionsList()) + ], + ), + ), + const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) + ], ), ), ], - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(top: 40), - child: Align( - alignment: Alignment.topLeft, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), - child: Text(S.of(context).activeDownloads, style: theme.textTheme.titleMedium), - ), - Expanded( - child: Container( - padding: const EdgeInsets.only(top: 10), - alignment: Alignment.topCenter, - child: const LoadingTracksCollectionsList()), - ), - ], - ), - ), - ), - ), - ]), - ), - ); + ))); } bool isSearchRequestValid(String request) { diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart index 1d9a626..c4a88c3 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart @@ -30,51 +30,50 @@ class _LoadingTracksCollectionsListState extends State( + return BlocConsumer( bloc: _bloc, listener: (context, state) { if (state is LoadingTracksCollectionsListLoaded) { - _updateCurrentList(state.loadingCollectionsObservers); + setState(() { + _updateCurrentList(state.loadingCollectionsObservers); + }); } - setState(() {}); }, - child: Stack( - children: [ - AnimatedList( - key: animatedListKey, - padding: const EdgeInsets.all(0), - initialItemCount: currentList.length, - itemBuilder: (context, index, animate) => _buildAnimatedTile(context, currentList[index], animate)), - LayoutBuilder(builder: (context, constrains) { - final blocState = _bloc.state; + builder: (context, state) { + if (state is LoadingTracksCollectionsListLoaded) { + if (currentList.isNotEmpty) { + return SliverAnimatedList( + key: animatedListKey, + initialItemCount: currentList.length, + itemBuilder: (context, index, animate) => _buildAnimatedTile(context, currentList[index], animate)); + } - if (blocState is LoadingTracksCollectionsListInitial) { - return Container( - alignment: Alignment.center, - child: const CircularProgressIndicator(), - ); - } + return SliverToBoxAdapter( + child: Text(S.of(context).tracksDontLoad, + style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)), + ); + } - if (blocState is LoadingTracksCollectionsListFailure) { - return Text( - S.of(context).errorOccurredWhileLoadingActiveDownloads( - blocState.failure?.message.toString() ?? 'the message isn\'t specified'), - style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)); - } + if (state is LoadingTracksCollectionsListInitial) { + return SliverToBoxAdapter( + child: Container( + alignment: Alignment.center, + child: const CircularProgressIndicator(), + ), + ); + } - if (blocState is LoadingTracksCollectionsListLoaded) { - if (currentList.isEmpty) { - return Center( - child: Text(S.of(context).tracksDontLoad, - style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)), - ); - } - } + if (state is LoadingTracksCollectionsListFailure) { + return SliverToBoxAdapter( + child: Text( + S.of(context).errorOccurredWhileLoadingActiveDownloads( + state.failure?.message.toString() ?? 'the message isn\'t specified'), + style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)), + ); + } - return Container(); - }), - ], - )); + return const SliverToBoxAdapter(); + }); } void _updateCurrentList(List newList) { @@ -86,14 +85,14 @@ class _LoadingTracksCollectionsListState extends State _buildAnimatedTile(context, removedItem, animation)); currentList.remove(removedItem); } for (var newItem in itemsToAdd) { currentList.add(newItem); - animatedListKey.currentState!.insertItem(currentList.length - 1); + animatedListKey.currentState?.insertItem(currentList.length - 1); } } diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart index fbdd5e8..5a93d5b 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; -import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks_collections/history_tracks_collections/domain/entities/history_tracks_collection.dart'; @@ -72,7 +71,7 @@ class _LoadingTracksCollectionTileState extends State createState() => _MainScreenState(); } -class _MainScreenState extends State with AutoRouteAwareStateMixin { +class _MainScreenState extends State { final PermissionsManager _permissionsManager = injector.get(); final RequiringPermissionServicesInitializer _requiringPermissionServicesInitializer = injector.get(); + final List _bottomNavigationBarRoutes = [const HomeRoute(), const HistoryRoute()]; + + int _currentIndexField = 0; + int get _currentIndex => _currentIndexField; + set _currentIndex(int newIndex) { + _currentIndexField = newIndex; + _currentIndexStreamController.add(newIndex); + } + + final StreamController _currentIndexStreamController = StreamController.broadcast(); + + late final BottomNavigationBarObserver _routeObserver; + + final GlobalKey _bottomNavigationBarKey = GlobalKey(); + + double? _bottomNavigationBarHeightField; + double? get _bottomNavigationBarHeight => _bottomNavigationBarHeightField; + set _bottomNavigationBarHeight(double? newHeight) { + _bottomNavigationBarHeightField = newHeight; + _bottomNavigationBarHeightStreamController.add(newHeight); + } + + final StreamController _bottomNavigationBarHeightStreamController = StreamController.broadcast(); + @override void initState() { super.initState(); + _routeObserver = BottomNavigationBarObserver(onRouteChanged: _onRouteChanged); + WidgetsBinding.instance.addPostFrameCallback((_) { Future(() async { if (!(await _permissionsManager.isPermissionsGranted()) && context.mounted) { @@ -40,64 +70,104 @@ class _MainScreenState extends State with AutoRouteAwareStateMixin { }); } + void _onRouteChanged(Route? newRoute) { + if (newRoute == null || newRoute.data == null) return; + final indexOfRoute = + _bottomNavigationBarRoutes.indexWhere((PageRouteInfo route) => route.routeName == newRoute.data!.name); + if (indexOfRoute != -1) { + if (_currentIndex != indexOfRoute) { + _currentIndex = indexOfRoute; + } + } + } + @override Widget build(BuildContext context) { - return AutoTabsRouter( - routes: const [HomeRoute(), HistoryRoute()], - navigatorObservers: () => [AutoRouteObserver()], - builder: (context, child) { - final tabsRouter = AutoTabsRouter.of(context); - return Scaffold( - resizeToAvoidBottomInset: false, - body: Stack( - children: [ - child, - Align( - alignment: Alignment.bottomCenter, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - padding: const EdgeInsets.only(left: 20, right: 20, top: 10), - alignment: Alignment.bottomCenter, - decoration: const BoxDecoration( - gradient: LinearGradient( - colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], - begin: Alignment.topCenter, - end: Alignment.bottomCenter)), - child: Theme( - data: ThemeData( - splashFactory: NoSplash.splashFactory, - highlightColor: const Color.fromARGB(0, 0, 0, 0), + return Scaffold( + resizeToAvoidBottomInset: false, + body: Stack( + children: [ + AutoRouter( + navigatorObservers: () { + return [_routeObserver]; + }, + builder: (context, content) => StreamBuilder( + stream: _bottomNavigationBarHeightStreamController.stream, + builder: (context, value) { + return CustomBottomNavigationBarAcessor(height: value.data, child: content); + }), + ), + Builder(builder: (context) { + _scheduleBottomNavigationBarHeightUpdate(); + + return StreamBuilder( + initialData: 0, + stream: _currentIndexStreamController.stream, + builder: (context, value) { + return Align( + alignment: Alignment.bottomCenter, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + key: _bottomNavigationBarKey, + padding: const EdgeInsets.only(left: 20, right: 20, top: 10), + alignment: Alignment.bottomCenter, + decoration: const BoxDecoration( + gradient: LinearGradient( + colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter)), + child: Theme( + data: ThemeData( + splashFactory: NoSplash.splashFactory, + highlightColor: const Color.fromARGB(0, 0, 0, 0), + ), + child: CustomBottomNavigationBar( + iconSize: const Size(25, 25), + labelFontSize: 10, + selectedItemColor: onBackgroundPrimaryColor, + unselectedItemColor: onBackgroundSecondaryColor, + selectingItemColor: onBackgroundThirdRateColor, + selectingSize: 0.9, + animationDuration: const Duration(milliseconds: 50), + currentIndex: value.data!, + onTap: (index) { + if (AutoRouter.of(context).topRoute.name != + _bottomNavigationBarRoutes[index].routeName) { + AutoRouter.of(context).push(_bottomNavigationBarRoutes[index]); + _currentIndex = index; + } + }, + items: [ + CustomBottomNavigationBarItem( + svgIconPath: 'resources/images/svg/bottom_bar/home_icon.svg', + svgActiveIconPath: 'resources/images/svg/bottom_bar/home_icon_active.svg', + label: S.of(context).main), + CustomBottomNavigationBarItem( + svgIconPath: 'resources/images/svg/bottom_bar/history_icon.svg', + svgActiveIconPath: 'resources/images/svg/bottom_bar/history_icon_active.svg', + label: S.of(context).history) + ]), ), - child: CustomNavigationBar( - iconSize: const Size(25, 25), - labelFontSize: 10, - selectedItemColor: onBackgroundPrimaryColor, - unselectedItemColor: onBackgroundSecondaryColor, - selectingItemColor: onBackgroundThirdRateColor, - selectingSize: 0.9, - animationDuration: const Duration(milliseconds: 50), - currentIndex: tabsRouter.activeIndex, - onTap: (index) => tabsRouter.setActiveIndex(index), - items: [ - CustomNavigationBarItem( - svgIconPath: 'resources/images/svg/bottom_bar/home_icon.svg', - svgActiveIconPath: 'resources/images/svg/bottom_bar/home_icon_active.svg', - label: S.of(context).main), - CustomNavigationBarItem( - svgIconPath: 'resources/images/svg/bottom_bar/history_icon.svg', - svgActiveIconPath: 'resources/images/svg/bottom_bar/history_icon_active.svg', - label: S.of(context).history), - ]), ), - ), - ], - ), - ), - ], - ), - ); - }); + ], + ), + ); + }); + }), + ], + ), + ); + } + + void _scheduleBottomNavigationBarHeightUpdate() { + SchedulerBinding.instance.addPostFrameCallback((_) { + var newBottomNavigationBarHeight = + (_bottomNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; + if (newBottomNavigationBarHeight != _bottomNavigationBarHeight) { + _bottomNavigationBarHeight = newBottomNavigationBarHeight; + } + }); } } diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart new file mode 100644 index 0000000..d4be334 --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart @@ -0,0 +1,4 @@ +export 'custom_bottom_navigation_bar_acessor.dart'; +export 'custom_bottom_navigation_bar_class.dart'; +export 'custom_bottom_navigation_bar_item.dart'; +export 'custom_bottom_navigation_bar_item_tile.dart'; diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart new file mode 100644 index 0000000..ac757b8 --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class CustomBottomNavigationBarAcessor extends InheritedWidget { + final double? height; + + const CustomBottomNavigationBarAcessor({super.key, required super.child, required this.height}); + + @override + bool updateShouldNotify(covariant CustomBottomNavigationBarAcessor oldWidget) { + return oldWidget.height != height; + } + + static CustomBottomNavigationBarAcessor of(BuildContext context) => + context.dependOnInheritedWidgetOfExactType() as CustomBottomNavigationBarAcessor; +} diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart similarity index 82% rename from lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart rename to lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart index d14c77c..e7d2487 100644 --- a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_class.dart +++ b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart'; -import 'custom_navigation_bar_item_tile.dart'; +import 'custom_bottom_navigation_bar_item_tile.dart'; -class CustomNavigationBar extends StatelessWidget { - final List items; +class CustomBottomNavigationBar extends StatelessWidget { + final List items; final Size iconSize; final double labelFontSize; final double selectingSize; @@ -15,7 +15,7 @@ class CustomNavigationBar extends StatelessWidget { final void Function(int index) onTap; final int currentIndex; - const CustomNavigationBar( + const CustomBottomNavigationBar( {super.key, required this.items, required this.iconSize, @@ -40,7 +40,7 @@ class CustomNavigationBar extends StatelessWidget { i++; return Expanded( - child: CustomNavigationBarItemTile( + child: CustomBottomNavigationBarItemTile( item: item, iconSize: iconSize, labelFontSize: labelFontSize, diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart new file mode 100644 index 0000000..5e50997 --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart @@ -0,0 +1,7 @@ +class CustomBottomNavigationBarItem { + CustomBottomNavigationBarItem({required this.svgIconPath, required this.svgActiveIconPath, required this.label}); + + final String svgIconPath; + final String svgActiveIconPath; + final String label; +} diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart similarity index 88% rename from lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart rename to lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart index aa989b4..98b38c2 100644 --- a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item_tile.dart +++ b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_item.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart'; -class CustomNavigationBarItemTile extends StatefulWidget { - final CustomNavigationBarItem item; +class CustomBottomNavigationBarItemTile extends StatefulWidget { + final CustomBottomNavigationBarItem item; final Size iconSize; final double labelFontSize; final double selectingSize; @@ -14,7 +14,7 @@ class CustomNavigationBarItemTile extends StatefulWidget { final void Function() onTap; final bool isSelected; - const CustomNavigationBarItemTile( + const CustomBottomNavigationBarItemTile( {super.key, required this.iconSize, required this.labelFontSize, @@ -28,11 +28,11 @@ class CustomNavigationBarItemTile extends StatefulWidget { required this.animationDuration}); @override - State createState() => _CustomNavigationBarItemTileState(); + State createState() => _CustomBottomNavigationBarItemTileState(); } -class _CustomNavigationBarItemTileState extends State with TickerProviderStateMixin { +class _CustomBottomNavigationBarItemTileState extends State with TickerProviderStateMixin { late final AnimationController _colorAnimationController; late final AnimationController _sizeAnimationController; @@ -52,7 +52,7 @@ class _CustomNavigationBarItemTileState extends State { - @override Widget build(BuildContext context) { - final theme = Theme.of(context); - - return Scaffold( - body: Column(children: [ - SizedBox( - height: 55 + MediaQuery.of(context).viewPadding.top, - child: Padding( - padding: EdgeInsets.only( - top: MediaQuery.of(context).viewPadding.top, - ), - child: Row( - children: [ - IconButton( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - onPressed: () { - AutoRouter.of(context).pop(); - }, - icon: SvgPicture.asset( - 'resources/images/svg/back_icon.svg', - height: backIconSize, - width: backIconSize, - )), - Padding( - padding: const EdgeInsets.only(left: 10), - child: Text( - S.of(context).settings, - style: theme.textTheme.titleSmall, - )), - ], - ), - ), - ), - Expanded( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10), - child: Column(mainAxisSize: MainAxisSize.min, children: [ - const AuthSettings(), - const DownloadTracksSettingsEditor(), - SettingsGroup(header: S.of(context).other, settings: [ - const LanguageSetting(), - SizedBox( - height: 40, - child: InkWell( - splashFactory: NoSplash.splashFactory, - highlightColor: Colors.transparent, - splashColor: Colors.transparent, - onTap: () { - AutoRouter.of(context).push(const AboutAppRoute()); - }, - child: Row( - children: [ - Expanded( - child: Text(S.of(context).aboutApp), - ), - const Icon( - Icons.info_outline_rounded, - color: onBackgroundSecondaryColor, - size: 30, - ), - ], - ), + return ScrollableScreenWithCustomAppBar( + title: S.of(context).settings, + body: Column(mainAxisSize: MainAxisSize.min, children: [ + const AuthSettings(), + const DownloadTracksSettingsEditor(), + SettingsGroup(header: S.of(context).other, settings: [ + const LanguageSetting(), + SizedBox( + height: 40, + child: InkWell( + splashFactory: NoSplash.splashFactory, + highlightColor: Colors.transparent, + splashColor: Colors.transparent, + onTap: () { + AutoRouter.of(context).push(const AboutAppRoute()); + }, + child: Row( + children: [ + Expanded( + child: Text(S.of(context).aboutApp), + ), + const Icon( + Icons.info_outline_rounded, + color: onBackgroundSecondaryColor, + size: 30, ), - ) - ]) - ]), - ), - )) + ], + ), + ), + ) + ]), + const CustomBottomNavigationBarListViewExpander() ]), ); } diff --git a/lib/features/presentation/shared/widgets/custom_app_bar.dart b/lib/features/presentation/shared/widgets/custom_app_bar.dart new file mode 100644 index 0000000..7c7a33f --- /dev/null +++ b/lib/features/presentation/shared/widgets/custom_app_bar.dart @@ -0,0 +1,47 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; + +class CustomAppBar extends StatelessWidget { + final String title; + final double height; + + const CustomAppBar({ + super.key, + required this.title, + this.height = appBarHeight + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return SizedBox( + height: height + MediaQuery.of(context).viewPadding.top, + child: Padding( + padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top), + child: Row( + children: [ + IconButton( + splashColor: Colors.transparent, + highlightColor: Colors.transparent, + onPressed: () { + AutoRouter.of(context).pop(); + }, + icon: SvgPicture.asset( + 'resources/images/svg/back_icon.svg', + height: backIconSize, + width: backIconSize, + )), + Padding( + padding: const EdgeInsets.only(left: 10), + child: Text( + title, + style: theme.textTheme.titleSmall, + )), + ], + ), + ), + ); + } +} diff --git a/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart b/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart new file mode 100644 index 0000000..cb5a84d --- /dev/null +++ b/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart'; + +class CustomBottomNavigationBarListViewExpander extends StatelessWidget { + const CustomBottomNavigationBarListViewExpander({super.key}); + + @override + Widget build(BuildContext context) { + return Container(height: CustomBottomNavigationBarAcessor.of(context).height ?? 0); + } +} diff --git a/lib/features/presentation/shared/widgets/custom_main_app_bar.dart b/lib/features/presentation/shared/widgets/custom_main_app_bar.dart new file mode 100644 index 0000000..c6caa42 --- /dev/null +++ b/lib/features/presentation/shared/widgets/custom_main_app_bar.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; + +class CustomMainAppBar extends StatelessWidget { + const CustomMainAppBar({ + super.key, + required this.title, + this.icon, + }); + + final String title; + final Widget? icon; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Padding( + padding: const EdgeInsets.symmetric(vertical: 20), + child: Container( + height: appBarHeight, + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [Text(title, style: theme.textTheme.titleLarge), if (icon != null) icon!], + ), + ), + ); + } +} diff --git a/lib/features/presentation/download_tracks_collection/widgets/custom_sliver_persistent_header_delegate.dart b/lib/features/presentation/shared/widgets/custom_sliver_persistent_header_delegate.dart similarity index 100% rename from lib/features/presentation/download_tracks_collection/widgets/custom_sliver_persistent_header_delegate.dart rename to lib/features/presentation/shared/widgets/custom_sliver_persistent_header_delegate.dart diff --git a/lib/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart b/lib/features/presentation/shared/widgets/network_failure_splash.dart similarity index 100% rename from lib/features/presentation/download_tracks_collection/widgets/network_failure_splash.dart rename to lib/features/presentation/shared/widgets/network_failure_splash.dart diff --git a/lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart b/lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart new file mode 100644 index 0000000..074dd87 --- /dev/null +++ b/lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/custom_app_bar.dart'; + +class ScrollableScreenWithCustomAppBar extends StatelessWidget { + final String title; + final Widget body; + + const ScrollableScreenWithCustomAppBar({super.key, required this.title, required this.body}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + CustomAppBar(title: title), + Expanded( + child: SingleChildScrollView( + child: Padding(padding: screenWithCustomAppBarPadding, child: body), + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/features/presentation/shared/widgets/widgets.dart b/lib/features/presentation/shared/widgets/widgets.dart new file mode 100644 index 0000000..ff0366e --- /dev/null +++ b/lib/features/presentation/shared/widgets/widgets.dart @@ -0,0 +1,8 @@ +export 'custom_app_bar.dart'; +export 'custom_bottom_navigation_bar_list_view_expander.dart'; +export 'custom_main_app_bar.dart'; +export 'custom_sliver_persistent_header_delegate.dart'; +export 'network_failure_splash.dart'; +export 'screen_with_custom_app_bar.dart'; +export 'search_text_field.dart'; +export 'strange_optimized_circular_progress_indicator.dart'; From a3329e75c341b5160b0dcf85f3941f8ab1c5eaea Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Tue, 23 Jul 2024 22:31:43 +1000 Subject: [PATCH 23/41] remade some listview to customlistview --- lib/core/app/themes/theme_consts.dart | 3 +- lib/core/di/injector.dart | 9 +- .../view/change_source_video_screen.dart | 186 +++---- .../download_tracks_collection_screen.dart | 374 +++++++------- .../widgets/custom_scrollbar.dart | 311 ------------ .../download_tracks_collection_header.dart | 1 + .../widgets/widgets.dart | 3 - .../history/view/history_screen.dart | 15 +- .../presentation/home/view/home_screen.dart | 166 +++--- .../home/widgets/liked_tracks_tile.dart | 62 +-- .../loading_tracks_collections_list_bloc.dart | 85 ---- ...loading_tracks_collections_list_event.dart | 16 - ...loading_tracks_collections_list_cubit.dart | 82 +++ ...loading_tracks_collections_list_state.dart | 6 +- .../view/loading_tracks_collections_list.dart | 83 ++- .../view/loading_tracks_collection_tile.dart | 7 +- .../presentation/main/view/main_screen.dart | 474 ++++++++++++++---- .../custom_bottom_navigation_bar.dart | 4 - .../custom_bottom_navigation_bar_acessor.dart | 15 - .../custom_bottom_navigation_bar_class.dart | 59 --- .../custom_bottom_navigation_bar_item.dart | 7 - ...ustom_bottom_navigation_bar_item_tile.dart | 133 ----- .../custom_navigation_bar_acessor.dart | 15 + .../shared/widgets/custom_app_bar.dart | 55 +- ...tom_navigation_bar_list_view_expander.dart | 4 +- .../shared/widgets/custom_main_app_bar.dart | 19 +- ...crollable_screen_with_custom_app_bar.dart} | 18 +- .../shared/widgets/search_text_field.dart | 6 + .../widgets/tap_animated_container.dart | 67 +++ .../presentation/shared/widgets/widgets.dart | 3 +- pubspec.lock | 10 +- pubspec.yaml | 1 + 32 files changed, 1090 insertions(+), 1209 deletions(-) delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart delete mode 100644 lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart delete mode 100644 lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_event.dart create mode 100644 lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart rename lib/features/presentation/home/widgets/loading_tracks_collections_list/{bloc => cubit}/loading_tracks_collections_list_state.dart (92%) delete mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart delete mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart delete mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart delete mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart delete mode 100644 lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart create mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart rename lib/features/presentation/shared/widgets/{screen_with_custom_app_bar.dart => scrollable_screen_with_custom_app_bar.dart} (63%) create mode 100644 lib/features/presentation/shared/widgets/tap_animated_container.dart diff --git a/lib/core/app/themes/theme_consts.dart b/lib/core/app/themes/theme_consts.dart index dca4222..ea09ffc 100644 --- a/lib/core/app/themes/theme_consts.dart +++ b/lib/core/app/themes/theme_consts.dart @@ -3,4 +3,5 @@ import 'package:flutter/material.dart'; const backIconSize = 25.0; const horizontalPadding = 15.0; const appBarHeight = 55.0; -const screenWithCustomAppBarPadding = EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10); \ No newline at end of file +const screenWithCustomAppBarPadding = EdgeInsets.only(left: horizontalPadding, right: horizontalPadding, top: 10); +const tappingAnimationDuration = Duration(milliseconds: 50); \ No newline at end of file diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index 3381f9f..61bd707 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -24,7 +24,7 @@ import 'package:spotify_downloader/features/presentation/download_tracks_collect import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; -import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; +import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/cubit/loading_tracks_collection_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/auth_settings/blocs/account_auth/account_auth_bloc.dart'; import 'package:spotify_downloader/features/presentation/settings/widgets/auth_settings/blocs/client_auth/client_auth_bloc.dart'; @@ -181,8 +181,8 @@ void _provideUseCases() { } void _provideBlocs() { - injector.registerFactory( - () => LoadingTracksCollectionsListBloc(injector.get())); + injector.registerFactory( + () => LoadingTracksCollectionsListCubit(injector.get())); injector.registerFactoryParam( (loadingTracksCollection, _) => LoadingTracksCollectionTileCubit(loadingTracksCollection)); @@ -210,8 +210,7 @@ void _provideBlocs() { injector.registerFactory( () => DownloadTrackInfoCubit(cancelTrackLoading: injector.get())); - injector.registerFactory( - () => TrackLoadingObservingCubit()); + injector.registerFactory(() => TrackLoadingObservingCubit()); injector.registerFactoryParam((track, _) => ChangeSourceVideoBloc( sourceTrack: track, find10VideosByTrack: injector.get(), diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 560aafb..1825a52 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -40,98 +40,102 @@ class _ChangeSourceVideoScreenState extends State { if (didPop) return; popPage(context); }, - child: Column( - children: [ - CustomAppBar( - title: S.of(context).changeTheDownloadSource, - ), - Expanded( - child: BlocConsumer( - bloc: _changeSourceVideoBloc, - listener: (context, state) { - if (state is ChangeSourceVideoFailure) { - showSmallTextSnackBar(state.failure?.message.toString() ?? '', context); - } - }, - builder: (context, state) { - if (state is ChangeSourceVideoLoaded) { - return CustomScrollView( - slivers: [ - SliverList.builder( - itemCount: state.videos.length, - itemBuilder: (context, index) { - final video = state.videos[index]; - final isVideoSelected = video == state.selectedVideo; - - return InkWell( - splashColor: onSurfaceSplashColor, - highlightColor: onSurfaceHighlightColor, - onTap: () => _changeSourceVideoBloc - .add(ChangeSourceVideoChangeSelectedVideo(selectedVideo: video)), - child: Container( - color: isVideoSelected ? onSurfaceHighlightColor : Colors.transparent, - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Image.network( - video.thumbnailUrl, - height: 80, - width: 100, - fit: BoxFit.fitHeight, - ), - Expanded( - child: Container( - padding: const EdgeInsets.only(left: 10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - video.title, - style: theme.textTheme.bodyMedium, - ), - Text( - S.of(context).nView(formatViewsCount(video.viewsCount)), - style: theme.textTheme.labelMedium - ?.copyWith(color: onBackgroundSecondaryColor), - ), - Padding( - padding: const EdgeInsets.only(top: 5), - child: Text( - video.author, - style: theme.textTheme.bodyMedium - ?.copyWith(color: onBackgroundSecondaryColor), - ), - ) - ], + child: SafeArea( + child: Scaffold( + body: Column( + children: [ + CustomAppBar( + title: S.of(context).changeTheDownloadSource, + ), + Expanded( + child: BlocConsumer( + bloc: _changeSourceVideoBloc, + listener: (context, state) { + if (state is ChangeSourceVideoFailure) { + showSmallTextSnackBar(state.failure?.message.toString() ?? '', context); + } + }, + builder: (context, state) { + if (state is ChangeSourceVideoLoaded) { + return CustomScrollView( + slivers: [ + SliverList.builder( + itemCount: state.videos.length, + itemBuilder: (context, index) { + final video = state.videos[index]; + final isVideoSelected = video == state.selectedVideo; + + return InkWell( + splashColor: onSurfaceSplashColor, + highlightColor: onSurfaceHighlightColor, + onTap: () => _changeSourceVideoBloc + .add(ChangeSourceVideoChangeSelectedVideo(selectedVideo: video)), + child: Container( + color: isVideoSelected ? onSurfaceHighlightColor : Colors.transparent, + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.network( + video.thumbnailUrl, + height: 80, + width: 100, + fit: BoxFit.fitHeight, ), - ), - ) - ], - )), - ); - }), - const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) - ], - ); - } - - if (state is ChangeSourceVideoNetworkFailure) { - return NetworkFailureSplash( - onRetryAgainButtonClicked: () => _changeSourceVideoBloc - .add(ChangeSourceVideoLoad(selectedVideoUrl: widget.track.youtubeUrl))); - } - - if (state is ChangeSourceVideoLoading) { - return const Center( - child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); - } - - return Container(); - }, - ), - ) - ], + Expanded( + child: Container( + padding: const EdgeInsets.only(left: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + video.title, + style: theme.textTheme.bodyMedium, + ), + Text( + S.of(context).nView(formatViewsCount(video.viewsCount)), + style: theme.textTheme.labelMedium + ?.copyWith(color: onBackgroundSecondaryColor), + ), + Padding( + padding: const EdgeInsets.only(top: 5), + child: Text( + video.author, + style: theme.textTheme.bodyMedium + ?.copyWith(color: onBackgroundSecondaryColor), + ), + ) + ], + ), + ), + ) + ], + )), + ); + }), + const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) + ], + ); + } + + if (state is ChangeSourceVideoNetworkFailure) { + return NetworkFailureSplash( + onRetryAgainButtonClicked: () => _changeSourceVideoBloc + .add(ChangeSourceVideoLoad(selectedVideoUrl: widget.track.youtubeUrl))); + } + + if (state is ChangeSourceVideoLoading) { + return const Center( + child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); + } + + return Container(); + }, + ), + ) + ], + ), + ), )); } diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index caef269..8f10150 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:scrollbar_ultima/scrollbar_ultima.dart'; import 'package:palette_generator/palette_generator.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; @@ -15,7 +16,7 @@ import 'package:spotify_downloader/features/data_domain/tracks_collections/histo import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart'; import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -65,10 +66,10 @@ class _DownloadTracksCollectionScreenState extends State _appBarOpacityField; set _appBarOpacity(double newValue) { _appBarOpacityField = newValue; - _appBarOpacityChangedController.add(newValue); + _appBarOpacityController.add(newValue); } - final StreamController _appBarOpacityChangedController = StreamController(); + final StreamController _appBarOpacityController = StreamController.broadcast(); double get appBarHeightWithViewPadding => appBarHeight + (MediaQuery.maybeOf(context)?.viewPadding.top ?? 0); @@ -106,7 +107,7 @@ class _DownloadTracksCollectionScreenState extends State( - bloc: _getTracksCollectionBloc, - builder: (context, getTracksCollectionState) { - return BlocBuilder( - bloc: _getTracksBloc, - builder: (context, getTracksState) { - if (getTracksCollectionState is GetTracksCollectionNetworkFailure) { - return NetworkFailureSplash( - onRetryAgainButtonClicked: () => _getTracksCollectionBloc.add(GetTracksCollectionLoad())); - } - - if (getTracksCollectionState is GetTracksCollectionLoaded) { - if (getTracksState is GetTracksBeforePartGotNetworkFailure) { + body: SafeArea( + top: false, + child: Stack( + children: [ + BlocBuilder( + bloc: _getTracksCollectionBloc, + builder: (context, getTracksCollectionState) { + return BlocBuilder( + bloc: _getTracksBloc, + builder: (context, getTracksState) { + if (getTracksCollectionState is GetTracksCollectionNetworkFailure) { return NetworkFailureSplash( - onRetryAgainButtonClicked: () => _getTracksBloc - .add(GetTracksGetTracks(tracksCollection: getTracksCollectionState.tracksCollection))); + onRetryAgainButtonClicked: () => _getTracksCollectionBloc.add(GetTracksCollectionLoad())); } - if (getTracksState is GetTracksTracksGot) { - return Stack(children: [ - Container( - alignment: AlignmentDirectional.topCenter, - child: NotificationListener( - onNotification: (OverscrollIndicatorNotification overScroll) { - overScroll.disallowIndicator(); - return false; - }, - child: CustomScrollbar.fixedScroll( - prototypeItem: const Padding( - padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), - child: TrackTilePlaceholder()), - controller: _scrollController, - animationCurve: Curves.easeInOut, - animationDuration: const Duration(milliseconds: 300), - durationBeforeHide: const Duration(seconds: 2), - thumbMargin: EdgeInsets.only(top: appBarHeightWithViewPadding + 10, bottom: 10 + (CustomBottomNavigationBarAcessor.of(context).height ?? 0)), - minScrollOffset: - (_headerHeight ?? appBarHeightWithViewPadding) - appBarHeightWithViewPadding, - hideThumbWhenOutOfOffset: true, - thumbBuilder: (context, isDragging) { - return Padding( - padding: const EdgeInsets.only(left: 5, right: 7), - child: Container( - height: 50, - width: 5, - decoration: BoxDecoration( - color: isDragging ? primaryColor : onBackgroundSecondaryColor, - borderRadius: BorderRadius.circular(2.5))), - ); - }, - child: Builder(builder: (context) { - return Builder(builder: (context) { - scheduleHeaderHeightUpdate(); - return CustomScrollView( - controller: _scrollController, - slivers: [ - DownloadTracksCollectionHeader( - key: _headerKey, - backgroundGradientColor: _backgroundGradientColor, - imageUrl: getTracksCollectionState.tracksCollection.bigImageUrl ?? '', - title: getTracksCollectionState.tracksCollection.name, - onFilterQueryChanged: _onFilterQueryChanged, - onDownloadAllButtonClicked: () => _onDownloadAllButtonClicked( - filterTracksState: _filterTracksBloc.state, - getTracksState: getTracksState), - ), - BlocBuilder( - bloc: _filterTracksBloc, - builder: (context, state) { - if (state is! FilterTracksChanged) return const SliverToBoxAdapter(); - - final filteredTracks = state.filteredTracks; - final isTracksPlaceholdersDisplayed = getTracksState - is! GetTracksAllGot && - state.isFilterQueryEmpty && - getTracksCollectionState.tracksCollection.tracksCount != null; - - return SliverPadding( - padding: const EdgeInsets.only(top: 20), - sliver: SliverPrototypeExtentList.builder( - itemCount: isTracksPlaceholdersDisplayed - ? getTracksCollectionState.tracksCollection.tracksCount - : filteredTracks.length, - prototypeItem: const Padding( - padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), - child: TrackTilePlaceholder()), - itemBuilder: (context, index) { - return Stack( - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 15, vertical: 7.5), - child: Builder(builder: (buildContext) { - if (index < (state.filteredTracks.length)) { - return TrackTile( - trackWithLoadingObserver: filteredTracks[index], - onDownloadButtonClicked: () => _downloadTracksCubit - .downloadTrack(filteredTracks[index]), - onCancelButtonClicked: () => _downloadTracksCubit - .cancelTrackLoading(filteredTracks[index]), - onMoreInfoClicked: () => - showDownloadTrackInfoBottomSheet( - context, filteredTracks[index]), - ); - } - - return const TrackTilePlaceholder(); - }), - ), - Builder( - builder: (buildContext) { - if (getTracksState - is GetTracksAfterPartGotNetworkFailure) { - return Positioned.fill( - child: IgnorePointer( - child: Container( - color: const Color.fromARGB(50, 0, 0, 0), - height: 10, - ), - ), - ); - } - - return Container(); - }, - ) - ], - ); - }, - ), - ); - }, - ), - const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) - ], + if (getTracksCollectionState is GetTracksCollectionLoaded) { + if (getTracksState is GetTracksBeforePartGotNetworkFailure) { + return NetworkFailureSplash( + onRetryAgainButtonClicked: () => _getTracksBloc.add( + GetTracksGetTracks(tracksCollection: getTracksCollectionState.tracksCollection))); + } + + if (getTracksState is GetTracksTracksGot) { + return Stack(children: [ + Container( + alignment: AlignmentDirectional.topCenter, + child: NotificationListener( + onNotification: (OverscrollIndicatorNotification overScroll) { + overScroll.disallowIndicator(); + return false; + }, + child: ScrollbarUltima( + prototypeItem: const Padding( + padding: EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: TrackTilePlaceholder()), + controller: _scrollController, + animationCurve: Curves.easeInOut, + animationDuration: const Duration(milliseconds: 300), + durationBeforeHide: const Duration(seconds: 2), + scrollbarPadding: EdgeInsets.only( + top: appBarHeightWithViewPadding + 10, + bottom: 10 + (CustomNavigationBarAcessor.of(context).expandedHeight ?? 0)), + minScrollOffset: (_headerHeight ?? appBarHeightWithViewPadding) - + appBarHeightWithViewPadding, + hideThumbWhenOutOfOffset: true, + dynamicThumbLength: false, + alwaysShowThumb: false, + thumbBuilder: (context, animation, widgetStates) { + final animatedPosition = Tween( + begin: const Offset(1, 0), + end: const Offset(0, 0) + ).animate(animation); + return SlideTransition( + position: animatedPosition, + child: Padding( + padding: const EdgeInsets.only(left: 5, right: 7), + child: Container( + height: 50, + width: 5, + decoration: BoxDecoration( + color: widgetStates.contains(WidgetState.dragged) + ? primaryColor + : onBackgroundSecondaryColor, + borderRadius: BorderRadius.circular(2.5))), + ), ); - }); - })))) - ]); + }, + child: Builder(builder: (context) { + return Builder(builder: (context) { + scheduleHeaderHeightUpdate(); + return CustomScrollView( + controller: _scrollController, + slivers: [ + DownloadTracksCollectionHeader( + key: _headerKey, + backgroundGradientColor: _backgroundGradientColor, + imageUrl: + getTracksCollectionState.tracksCollection.bigImageUrl ?? '', + title: getTracksCollectionState.tracksCollection.name, + onFilterQueryChanged: _onFilterQueryChanged, + onDownloadAllButtonClicked: () => _onDownloadAllButtonClicked( + filterTracksState: _filterTracksBloc.state, + getTracksState: getTracksState), + ), + BlocBuilder( + bloc: _filterTracksBloc, + builder: (context, state) { + if (state is! FilterTracksChanged) + return const SliverToBoxAdapter(); + + final filteredTracks = state.filteredTracks; + final isTracksPlaceholdersDisplayed = getTracksState + is! GetTracksAllGot && + state.isFilterQueryEmpty && + getTracksCollectionState.tracksCollection.tracksCount != null; + + return SliverPadding( + padding: const EdgeInsets.only(top: 20), + sliver: SliverPrototypeExtentList.builder( + itemCount: isTracksPlaceholdersDisplayed + ? getTracksCollectionState.tracksCollection.tracksCount + : filteredTracks.length, + prototypeItem: const Padding( + padding: + EdgeInsets.symmetric(horizontal: 15, vertical: 7.5), + child: TrackTilePlaceholder()), + itemBuilder: (context, index) { + return Stack( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 15, vertical: 7.5), + child: Builder(builder: (buildContext) { + if (index < (state.filteredTracks.length)) { + return TrackTile( + trackWithLoadingObserver: filteredTracks[index], + onDownloadButtonClicked: () => + _downloadTracksCubit + .downloadTrack(filteredTracks[index]), + onCancelButtonClicked: () => _downloadTracksCubit + .cancelTrackLoading(filteredTracks[index]), + onMoreInfoClicked: () => + showDownloadTrackInfoBottomSheet( + context, filteredTracks[index]), + ); + } + + return const TrackTilePlaceholder(); + }), + ), + Builder( + builder: (buildContext) { + if (getTracksState + is GetTracksAfterPartGotNetworkFailure) { + return Positioned.fill( + child: IgnorePointer( + child: Container( + color: const Color.fromARGB(50, 0, 0, 0), + height: 10, + ), + ), + ); + } + + return Container(); + }, + ) + ], + ); + }, + ), + ); + }, + ), + const SliverToBoxAdapter( + child: CustomBottomNavigationBarListViewExpander()) + ], + ); + }); + })))) + ]); + } } - } - - return const Center( - child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); - }, - ); - }, - ), - BlocBuilder( - bloc: _getTracksCollectionBloc, - builder: (context, getTracksCollectionState) { - return BlocBuilder( - bloc: _getTracksBloc, - builder: (context, getTracksState) { - return StreamBuilder( - initialData: 0, - stream: _appBarOpacityChangedController.stream, - builder: (context, newOpacity) { - if (getTracksCollectionState is GetTracksCollectionLoaded && - getTracksState is GetTracksTracksGot) { - return GradientAppBarWithOpacity.visible( - firstColor: _backgroundGradientColor, - secondaryColor: backgroundColor, - title: getTracksCollectionState.tracksCollection.name, - opacity: newOpacity.data ?? 0, - ); - } - - return const GradientAppBarWithOpacity.invisible(); - }); - }, - ); - }, - ) - ], + + return const Center( + child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); + }, + ); + }, + ), + BlocBuilder( + bloc: _getTracksCollectionBloc, + builder: (context, getTracksCollectionState) { + return BlocBuilder( + bloc: _getTracksBloc, + builder: (context, getTracksState) { + return StreamBuilder( + initialData: 0, + stream: _appBarOpacityController.stream, + builder: (context, newOpacity) { + if (getTracksCollectionState is GetTracksCollectionLoaded && + getTracksState is GetTracksTracksGot) { + return GradientAppBarWithOpacity.visible( + firstColor: _backgroundGradientColor, + secondaryColor: backgroundColor, + title: getTracksCollectionState.tracksCollection.name, + opacity: newOpacity.data ?? 0, + ); + } + + return const GradientAppBarWithOpacity.invisible(); + }); + }, + ); + }, + ) + ], + ), ), ), ); diff --git a/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart b/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart deleted file mode 100644 index 2533015..0000000 --- a/lib/features/presentation/download_tracks_collection/widgets/custom_scrollbar.dart +++ /dev/null @@ -1,311 +0,0 @@ -import 'dart:math'; -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:spotify_downloader/core/utils/utils.dart'; - -class CustomScrollbar extends StatefulWidget { - final Widget Function(BuildContext context, bool isDragging)? thumbBuilder; - final EdgeInsets thumbMargin; - final ScrollController? controller; - final Widget child; - final double? scrollBarHeight; - - final double? minScrollOffset; - final double? maxScrollOfssetFromEnd; - - final bool hideThumbWhenOutOfOffset; - - final Curve animationCurve; - final Duration animationDuration; - final Duration durationBeforeHide; - - final bool isFixedScroll; - final Widget? _prototypeItem; - Widget? get prototypeItem => _prototypeItem; - - const CustomScrollbar( - {super.key, - required this.child, - this.thumbBuilder, - this.controller, - this.scrollBarHeight, - this.animationCurve = Curves.easeInOut, - this.animationDuration = const Duration(milliseconds: 500), - this.thumbMargin = const EdgeInsets.all(0), - this.durationBeforeHide = const Duration(seconds: 1), - this.minScrollOffset, - this.maxScrollOfssetFromEnd, - this.hideThumbWhenOutOfOffset = false}) - : isFixedScroll = false, - _prototypeItem = null; - - const CustomScrollbar.fixedScroll( - {super.key, - required this.child, - this.thumbBuilder, - this.controller, - this.scrollBarHeight, - this.animationCurve = Curves.easeInOut, - this.animationDuration = const Duration(milliseconds: 500), - this.thumbMargin = const EdgeInsets.all(0), - this.durationBeforeHide = const Duration(seconds: 1), - this.minScrollOffset, - this.maxScrollOfssetFromEnd, - this.hideThumbWhenOutOfOffset = false, - required Widget prototypeItem}) - : _prototypeItem = prototypeItem, - isFixedScroll = true; - - @override - CustomScrollbarState createState() => CustomScrollbarState(); -} - -class CustomScrollbarState extends State with SingleTickerProviderStateMixin { - late final Widget Function(BuildContext context, bool isDragging) _thumbBuilder; - ScrollController? _scrollController; - - double _thumbOffset = 0; - double thumbHeight = 0; - double get _scrollBarHeight => (widget.scrollBarHeight ?? context.size!.height) - widget.thumbMargin.vertical; - double get _maxThumbOffset => _scrollBarHeight - thumbHeight; - - late final AnimationController _animationController; - late final Animation _animationOffset; - - bool _isThumbShown = false; - bool _isDragging = false; - - bool _isOutOfOffsetScroll = true; - - double get _minScrollOffset => widget.minScrollOffset ?? 0; - double get _maxScrollOffsetFromEnd => widget.maxScrollOfssetFromEnd ?? 0; - double? get _maxScrollOffset => - _scrollController != null ? _scrollController!.position.maxScrollExtent - _maxScrollOffsetFromEnd : null; - - Timer? _plannedHidding; - - final GlobalKey _prototypeItemKey = GlobalKey(); - double? _prototypeHeight; - - double _scrollBarOffset = 0; - - @override - void initState() { - super.initState(); - _thumbBuilder = widget.thumbBuilder ?? _createDeffaultThumb; - - _animationController = AnimationController( - vsync: this, - duration: widget.animationDuration, - ); - - _animationOffset = Tween( - begin: const Offset(1.0, 0.0), - end: const Offset(0.0, 0.0), - ).animate(CurvedAnimation( - parent: _animationController, - curve: widget.animationCurve, - )); - - _updateScrollController(); - _updatePrototypeHeight(); - } - - @override - void didUpdateWidget(CustomScrollbar oldWidget) { - super.didUpdateWidget(oldWidget); - - _updateScrollController(); - _updatePrototypeHeight(); - } - - void _updateScrollController() { - if (_scrollController != null) { - _scrollController!.removeListener(_onScroll); - _scrollController!.position.isScrollingNotifier.removeListener(_onScrollStatusChanged); - } - - _scrollController = widget.controller ?? PrimaryScrollController.of(context); - _scrollController!.addListener(_onScroll); - - SchedulerBinding.instance.addPostFrameCallback((_) { - _scrollController!.position.isScrollingNotifier.addListener(_onScrollStatusChanged); - }); - } - - void _updatePrototypeHeight() { - if (widget.isFixedScroll) { - SchedulerBinding.instance.addPostFrameCallback((_) { - _prototypeHeight = (_prototypeItemKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; - }); - } - } - - Widget _createDeffaultThumb(BuildContext context, bool isDragging) { - return Container(width: 6, height: 100, color: Colors.black.withOpacity(0.7)); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - } - - @override - void dispose() { - _scrollController?.removeListener(_onScroll); - _animationController.dispose(); - super.dispose(); - } - - void _onScroll() { - if (!_isDragging) { - _scrollBarOffset = _scrollController!.offset; - _updateThumbOffset(); - } - } - - void _updateThumbOffset() { - var thumbScrollOffset = _scrollBarOffset - _minScrollOffset; - final totalScrollOffset = _scrollController!.position.maxScrollExtent - _maxScrollOffsetFromEnd - _minScrollOffset; - _thumbOffset = (thumbScrollOffset / totalScrollOffset * _maxThumbOffset); - if (_thumbOffset < 0 || _thumbOffset > _maxThumbOffset || totalScrollOffset < 0) { - if (!_isOutOfOffsetScroll) { - _isOutOfOffsetScroll = true; - if (widget.hideThumbWhenOutOfOffset) { - _hideThumb(); - } - } - } else { - if (_isOutOfOffsetScroll) { - _isOutOfOffsetScroll = false; - if (widget.hideThumbWhenOutOfOffset) { - _showThumb(); - } - } - } - - setState(() { - _thumbOffset = _thumbOffset.clamp(0, _maxThumbOffset); - }); - } - - void _onScrollStatusChanged() { - if (_scrollController!.position.isScrollingNotifier.value && !_isThumbShown && !_isOutOfOffsetScroll) { - _plannedHidding?.cancel(); - _plannedHidding = null; - _showThumb(); - return; - } - - if (_thumbShouldHide()) { - _plannedHidding?.cancel(); - _plannedHidding = null; - - _schedulePossibleThumbHidding(); - } - } - - void _showThumb() { - _animationController.forward(); - _isThumbShown = true; - } - - bool _thumbShouldHide() => - _isOutOfOffsetScroll || - (!_scrollController!.position.isScrollingNotifier.value && _isThumbShown && !_isDragging); - - void _schedulePossibleThumbHidding() { - _plannedHidding = Timer(widget.durationBeforeHide, () { - if (_thumbShouldHide()) { - _hideThumb(); - } - }); - } - - void _hideThumb() { - _animationController.reverse(); - _isThumbShown = false; - } - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - widget.child, - Positioned( - right: 0, - top: _thumbOffset, - bottom: 0, - child: Container( - padding: widget.thumbMargin, - alignment: Alignment.topCenter, - child: SlideTransition( - position: _animationOffset, - child: GestureDetector( - onVerticalDragStart: (_) { - _isDragging = true; - _showThumb(); - }, - onVerticalDragUpdate: _onThumbDragged, - onVerticalDragEnd: (_) { - setState(() { - _isDragging = false; - }); - _schedulePossibleThumbHidding(); - }, - child: Container( - color: Colors.transparent, - child: Builder(builder: (context) { - SchedulerBinding.instance.addPostFrameCallback((duration) { - thumbHeight = context.size!.height; - }); - - return _thumbBuilder(context, _isDragging); - }))), - ))), - Visibility( - visible: false, - maintainSize: true, - maintainAnimation: true, - maintainState: true, - child: IntrinsicWidth( - child: IntrinsicHeight( - child: Container( - key: _prototypeItemKey, - child: widget.prototypeItem ?? Container(), - ), - ), - ), - ), - ], - ); - } - - void _onThumbDragged(DragUpdateDetails details) { - final newOffset = _addDragDeltaToOffset(oldOffset: _scrollBarOffset, dragDelta: details.primaryDelta!); - _scrollBarOffset = newOffset; - _updateThumbOffset(); - - if (widget.isFixedScroll && _prototypeHeight != null) { - final closestTopItemOffset = newOffset ~/ _prototypeHeight! * _prototypeHeight!; - final closestBottomItemOffset = (newOffset ~/ _prototypeHeight! + 1) * _prototypeHeight!; - - final newScrollControllerOffset = - closest(newOffset, closestTopItemOffset, closestBottomItemOffset).clamp(_minScrollOffset, _maxScrollOffset!); - - _scrollController!.jumpTo(newScrollControllerOffset); - } else { - _scrollController!.jumpTo(newOffset); - } - } - - double _addDragDeltaToOffset({required double oldOffset, required double dragDelta}) { - final absoluteDelta = dragDelta / _maxThumbOffset; - oldOffset = max(_minScrollOffset, oldOffset); - double newOffset = (oldOffset + (absoluteDelta * (_maxScrollOffset! - _minScrollOffset))) - .clamp(_minScrollOffset, _maxScrollOffset!); - return newOffset; - } -} diff --git a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart index 4c8fa50..2ff733c 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/download_tracks_collection_header.dart @@ -1,5 +1,6 @@ import 'dart:math'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:flutter/material.dart'; import 'package:sliver_tools/sliver_tools.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; diff --git a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart index 76e6e29..df51e78 100644 --- a/lib/features/presentation/download_tracks_collection/widgets/widgets.dart +++ b/lib/features/presentation/download_tracks_collection/widgets/widgets.dart @@ -1,8 +1,5 @@ -export 'custom_scrollbar.dart'; export 'gradient_app_bar_with_opacity.dart'; -export '../../shared/widgets/network_failure_splash.dart'; export 'track_tile_placeholder.dart'; export 'track_tile/view/track_tile.dart'; -export '../../shared/widgets/custom_sliver_persistent_header_delegate.dart'; export 'download_tracks_collection_header.dart'; export 'download_tracks_collection_manage_bar.dart'; diff --git a/lib/features/presentation/history/view/history_screen.dart b/lib/features/presentation/history/view/history_screen.dart index e9842a3..21fc7f6 100644 --- a/lib/features/presentation/history/view/history_screen.dart +++ b/lib/features/presentation/history/view/history_screen.dart @@ -33,13 +33,12 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM return Scaffold( resizeToAvoidBottomInset: false, - body: Padding( - padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top), + body: SafeArea( child: Column( children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), - child: CustomMainAppBar(title: S.of(context).searchHistory), + CustomMainAppBar( + title: S.of(context).searchHistory, + contentPadding: const EdgeInsets.symmetric(horizontal: horizontalPadding), ), Expanded( child: CustomScrollView(slivers: [ @@ -51,9 +50,9 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM itemCount: state.historyTracksCollections.length, itemBuilder: (context, index) { final historyTracksCollection = state.historyTracksCollections[index]; - return InkWell( - splashColor: onSurfaceSplashColor, - highlightColor: onSurfaceHighlightColor, + return TapAnimatedContainer( + tappingMaskColor: backgroundColor.withOpacity(0.4), + tappingScale: 0.99, onTap: () async { AutoRouter.of(context) .push(DownloadTracksCollectionRouteWithHistoryTracksCollection( diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index 30eee0a..d282ca3 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -13,7 +13,6 @@ import 'package:spotify_downloader/features/presentation/home/widgets/loading_tr import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; - @RoutePage() class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @@ -36,104 +35,105 @@ class _HomeScreenState extends State { final theme = Theme.of(context); return Scaffold( resizeToAvoidBottomInset: false, - body: Padding( - padding: EdgeInsets.only( - top: MediaQuery.of(context).viewPadding.top, left: horizontalPadding, right: horizontalPadding), - child: Column( - children: [ - CustomMainAppBar( - title: 'SpotifyDownloader', - icon: IconButton( - onPressed: () { - AutoRouter.of(context).push(const SettingsRoute()); - }, - icon: SvgPicture.asset( - 'resources/images/svg/settings_icon.svg', - height: 27, - width: 27, - )), - ), - Expanded( - child: CustomScrollView( - slivers: [ - SliverPadding( - padding: const EdgeInsets.only(top: 20), - sliver: SliverToBoxAdapter( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(S.of(context).downloadFromLink, style: theme.textTheme.titleMedium), - Padding( - padding: const EdgeInsets.only(top: 10), - child: SearchTextField( - theme: theme, - height: 45, - iconPadding: const EdgeInsets.all(10), - hintText: S.of(context).downloadFromLinkTextFieldHintText, - controller: searchTextFieldController, - onSubmitted: (value) async { - if (isSearchRequestValid(value)) { - await AutoRouter.of(context) - .push(DownloadTracksCollectionRouteWithUrl(url: value)); - searchTextFieldController.clear(); - } else if (value != '') { - searchTextFieldController.clear(); - showBigTextSnackBar(S.of(context).incorrectLink, context); - } - }, - ), - ), - ], - ), - ), - ), - SliverPadding( - padding: const EdgeInsets.only(top: 40), - sliver: SliverToBoxAdapter( - child: Align( - alignment: Alignment.topLeft, + body: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), + child: Column( + children: [ + CustomMainAppBar( + title: 'SpotifyDownloader', + icon: IconButton( + onPressed: () { + AutoRouter.of(context).push(const SettingsRoute()); + }, + icon: SvgPicture.asset( + 'resources/images/svg/settings_icon.svg', + height: 27, + width: 27, + )), + ), + Expanded( + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: const EdgeInsets.only(top: 20), + sliver: SliverToBoxAdapter( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(S.of(context).downloadLikedTracks, style: theme.textTheme.titleMedium), + Text(S.of(context).downloadFromLink, style: theme.textTheme.titleMedium), Padding( padding: const EdgeInsets.only(top: 10), - child: LikedTracksTile( + child: SearchTextField( theme: theme, - title: S.of(context).likedTracksTitle, - onTapped: () { - AutoRouter.of(context).push( - DownloadTracksCollectionRouteWithHistoryTracksCollection( - historyTracksCollection: HistoryTracksCollection.likedTracks)); + height: 45, + iconPadding: const EdgeInsets.all(10), + hintText: S.of(context).downloadFromLinkTextFieldHintText, + controller: searchTextFieldController, + onSubmitted: (value) async { + if (isSearchRequestValid(value)) { + await AutoRouter.of(context) + .push(DownloadTracksCollectionRouteWithUrl(url: value)); + searchTextFieldController.clear(); + } else if (value != '') { + searchTextFieldController.clear(); + showBigTextSnackBar(S.of(context).incorrectLink, context); + } }, - image: const CachedNetworkImageProvider( - 'https://misc.scdn.co/liked-songs/liked-songs-300.png', - ), ), ), ], ), ), ), - ), - SliverPadding( - padding: const EdgeInsets.only(top: 40), - sliver: MultiSliver( - children: [ - SliverToBoxAdapter( - child: Text(S.of(context).activeDownloads, style: theme.textTheme.titleMedium), + SliverPadding( + padding: const EdgeInsets.only(top: 40), + sliver: SliverToBoxAdapter( + child: Align( + alignment: Alignment.topLeft, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(S.of(context).downloadLikedTracks, style: theme.textTheme.titleMedium), + Padding( + padding: const EdgeInsets.only(top: 10), + child: LikedTracksTile( + theme: theme, + title: S.of(context).likedTracksTitle, + onTap: () { + AutoRouter.of(context).push( + DownloadTracksCollectionRouteWithHistoryTracksCollection( + historyTracksCollection: HistoryTracksCollection.likedTracks)); + }, + image: const CachedNetworkImageProvider( + 'https://misc.scdn.co/liked-songs/liked-songs-300.png', + ), + ), + ), + ], + ), ), - const SliverPadding( - padding: EdgeInsets.only(top: 10), sliver: LoadingTracksCollectionsList()) - ], + ), + ), + SliverPadding( + padding: const EdgeInsets.only(top: 40), + sliver: MultiSliver( + children: [ + SliverToBoxAdapter( + child: Text(S.of(context).activeDownloads, style: theme.textTheme.titleMedium), + ), + const SliverPadding( + padding: EdgeInsets.only(top: 10), sliver: LoadingTracksCollectionsList()) + ], + ), ), - ), - const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) - ], + const SliverToBoxAdapter(child: CustomBottomNavigationBarListViewExpander()) + ], + ), ), - ), - ], - ))); + ], + )), + )); } bool isSearchRequestValid(String request) { diff --git a/lib/features/presentation/home/widgets/liked_tracks_tile.dart b/lib/features/presentation/home/widgets/liked_tracks_tile.dart index cc2bfa5..7135f70 100644 --- a/lib/features/presentation/home/widgets/liked_tracks_tile.dart +++ b/lib/features/presentation/home/widgets/liked_tracks_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; class LikedTracksTile extends StatelessWidget { const LikedTracksTile({ @@ -7,45 +8,44 @@ class LikedTracksTile extends StatelessWidget { required this.theme, required this.title, required this.image, - this.onTapped, + this.onTap, }); final String title; final ImageProvider image; - final Function? onTapped; + final void Function()? onTap; final ThemeData theme; @override Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - onTapped?.call(); - }, - child: Container( - width: 180, - height: 55, - decoration: BoxDecoration(color: surfaceColor, borderRadius: BorderRadius.circular(5)), - child: Row( - children: [ - Container( - width: 55, - decoration: BoxDecoration( - borderRadius: const BorderRadius.only(topLeft: Radius.circular(5), bottomLeft: Radius.circular(5)), - image: DecorationImage(image: image)), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), - child: Text( - title, - maxLines: 2, - style: theme.textTheme.bodyMedium, - ), + return TapAnimatedContainer( + tappingMaskColor: surfaceColor.withOpacity(0.4), + tappingScale: 0.99, + onTap: onTap, + child: Container( + width: 180, + height: 55, + decoration: BoxDecoration(color: surfaceColor, borderRadius: BorderRadius.circular(5)), + child: Row( + children: [ + Container( + width: 55, + decoration: BoxDecoration( + borderRadius: const BorderRadius.only(topLeft: Radius.circular(5), bottomLeft: Radius.circular(5)), + image: DecorationImage(image: image)), ), - ) - ], - ), - ), - ); + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), + child: Text( + title, + maxLines: 2, + style: theme.textTheme.bodyMedium, + ), + ), + ) + ], + ), + )); } } diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart deleted file mode 100644 index ddaa78c..0000000 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'dart:async'; - -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:spotify_downloader/core/utils/utils.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; - - -part 'loading_tracks_collections_list_event.dart'; -part 'loading_tracks_collections_list_state.dart'; - -class LoadingTracksCollectionsListBloc - extends Bloc { - final GetLoadingTracksCollectionsObserver _getLoadingTracksCollectionsObserver; - final List _loadingCollectionsObservers = List.empty(growable: true); - StreamSubscription? _loadingCollectionsChangedStreamSubscription; - - final List _statusStreamSubscriptions = List.empty(growable: true); - - LoadingTracksCollectionsListBloc(this._getLoadingTracksCollectionsObserver) - : super(LoadingTracksCollectionsListInitial()) { - on(_onLoad); - on(_onUpdate); - } - - @override - Future close() async { - await _loadingCollectionsChangedStreamSubscription?.cancel(); - await unsubscribeFromLoadingTracksCollections(); - await super.close(); - } - - Future _onLoad(LoadingTracksCollectionsListLoad event, Emitter emit) async { - final result = await _getLoadingTracksCollectionsObserver.call(null); - if (!result.isSuccessful) { - emit(LoadingTracksCollectionsListFailure(failure: result.failure)); - return; - } - - await _loadingCollectionsChangedStreamSubscription?.cancel(); - _loadingCollectionsChangedStreamSubscription = - result.result!.loadingTracksCollectionsChangedStream.listen((event) async { - changeLoadingTracksCollections(result.result!.loadingTracksCollections); - add(LoadingTracksCollectionsListUpdate(loadingCollectionsObservers: result.result!.loadingTracksCollections)); - }); - - await changeLoadingTracksCollections(result.result!.loadingTracksCollections); - await _onUpdate( - LoadingTracksCollectionsListUpdate(loadingCollectionsObservers: result.result!.loadingTracksCollections), - emit); - } - - Future changeLoadingTracksCollections(List loadingTracksCollections) async { - _loadingCollectionsObservers.clear(); - _loadingCollectionsObservers.addAll(loadingTracksCollections); - - await unsubscribeFromLoadingTracksCollections(); - subscribeToLoadingTracksCollections(loadingTracksCollections); - } - - Future _onUpdate( - LoadingTracksCollectionsListUpdate event, Emitter emit) async { - emit(LoadingTracksCollectionsListLoaded( - loadingCollectionsObservers: _loadingCollectionsObservers - .where((o) => - o.loadingStatus != LoadingTracksCollectionStatus.loaded || - o.loadingInfo.failuredTracks / o.loadingInfo.totalTracks > 0.3) - .toList())); - } - - Future unsubscribeFromLoadingTracksCollections() async { - for (var sub in _statusStreamSubscriptions) { - await sub.cancel(); - } - _statusStreamSubscriptions.clear(); - } - - void subscribeToLoadingTracksCollections(List loadingTracksCollections) async { - for (var loadingTracksCollection in loadingTracksCollections) { - _statusStreamSubscriptions.add(loadingTracksCollection.loadingStatusChangedStream.listen((event) { - add(LoadingTracksCollectionsListUpdate(loadingCollectionsObservers: _loadingCollectionsObservers)); - })); - } - } -} diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_event.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_event.dart deleted file mode 100644 index 1171d8d..0000000 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_event.dart +++ /dev/null @@ -1,16 +0,0 @@ -part of 'loading_tracks_collections_list_bloc.dart'; - -sealed class LoadingTracksCollectionsListEvent extends Equatable { - const LoadingTracksCollectionsListEvent(); - - @override - List get props => []; -} - -final class LoadingTracksCollectionsListLoad extends LoadingTracksCollectionsListEvent {} - -final class LoadingTracksCollectionsListUpdate extends LoadingTracksCollectionsListEvent { - final List loadingCollectionsObservers; - - const LoadingTracksCollectionsListUpdate({required this.loadingCollectionsObservers}); -} diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart new file mode 100644 index 0000000..3d82a7a --- /dev/null +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart @@ -0,0 +1,82 @@ +import 'dart:async'; + +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/domain.dart'; + +part 'loading_tracks_collections_list_state.dart'; + +class LoadingTracksCollectionsListCubit extends Cubit { + final GetLoadingTracksCollectionsObserver _getLoadingTracksCollectionsListObserver; + + final List _loadingCollectionsObservers = List.empty(growable: true); + + StreamSubscription? _loadingTracksCollectionsListStreamSubscription; + final List _loadingTracksCollectionsStatusesStreamSubscriptions = List.empty(growable: true); + + LoadingTracksCollectionsListCubit(this._getLoadingTracksCollectionsListObserver) + : super(LoadingTracksCollectionsListInitial()); + + static const double _minSuccessfulPercent = 0.3; + + @override + Future close() async { + await _unsubscribeFromListObserver(); + await _unsubscribeFromLoadingTracksCollections(); + await super.close(); + } + + Future load() async { + final getLoadingTracksCollectionsObserverResult = await _getLoadingTracksCollectionsListObserver.call(null); + if (!getLoadingTracksCollectionsObserverResult.isSuccessful) { + emit(LoadingTracksCollectionsListFailure(failure: getLoadingTracksCollectionsObserverResult.failure)); + return; + } + + await _changeListObserver(getLoadingTracksCollectionsObserverResult.result!); + await _changeLoadingTracksCollections(getLoadingTracksCollectionsObserverResult.result!.loadingTracksCollections); + + await _update(); + } + + Future _changeListObserver(LoadingTracksCollectionsObserver listObserver) async { + _unsubscribeFromListObserver(); + + _loadingTracksCollectionsListStreamSubscription = + listObserver.loadingTracksCollectionsChangedStream.listen((event) async { + _changeLoadingTracksCollections(listObserver.loadingTracksCollections); + _update(); + }); + } + + Future _unsubscribeFromListObserver() async { + await _loadingTracksCollectionsListStreamSubscription?.cancel(); + } + + Future _changeLoadingTracksCollections(List loadingTracksCollections) async { + _loadingCollectionsObservers.clear(); + _loadingCollectionsObservers.addAll(loadingTracksCollections); + + await _unsubscribeFromLoadingTracksCollections(); + for (var loadingTracksCollection in loadingTracksCollections) { + _loadingTracksCollectionsStatusesStreamSubscriptions + .add(loadingTracksCollection.loadingStatusChangedStream.listen((event) => _update())); + } + } + + Future _unsubscribeFromLoadingTracksCollections() async { + for (var sub in _loadingTracksCollectionsStatusesStreamSubscriptions) { + await sub.cancel(); + } + _loadingTracksCollectionsStatusesStreamSubscriptions.clear(); + } + + Future _update() async { + emit(LoadingTracksCollectionsListLoaded( + loadingCollectionsObservers: _loadingCollectionsObservers + .where((o) => + o.loadingStatus != LoadingTracksCollectionStatus.loaded || + o.loadingInfo.failuredTracks / o.loadingInfo.totalTracks > _minSuccessfulPercent) + .toList())); + } +} diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_state.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_state.dart similarity index 92% rename from lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_state.dart rename to lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_state.dart index 97754a3..46631e6 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_state.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_state.dart @@ -1,4 +1,4 @@ -part of 'loading_tracks_collections_list_bloc.dart'; +part of 'loading_tracks_collections_list_cubit.dart'; sealed class LoadingTracksCollectionsListState { const LoadingTracksCollectionsListState(); @@ -7,9 +7,9 @@ sealed class LoadingTracksCollectionsListState { final class LoadingTracksCollectionsListInitial extends LoadingTracksCollectionsListState {} final class LoadingTracksCollectionsListLoaded extends LoadingTracksCollectionsListState { - const LoadingTracksCollectionsListLoaded({required this.loadingCollectionsObservers}); - final List loadingCollectionsObservers; + + const LoadingTracksCollectionsListLoaded({required this.loadingCollectionsObservers}); } final class LoadingTracksCollectionsListFailure extends LoadingTracksCollectionsListState { diff --git a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart index c4a88c3..2dc9751 100644 --- a/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart +++ b/lib/features/presentation/home/widgets/loading_tracks_collections_list/view/loading_tracks_collections_list.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sliver_tools/sliver_tools.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/features/data_domain/tracks/observe_tracks_loading/domain/entities/loading_tracks_collection/loading_tracks_collection_observer.dart'; -import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/bloc/loading_tracks_collections_list_bloc.dart'; +import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/widgets/loading_tracks_collection_tile/view/loading_tracks_collection_tile.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -15,14 +16,14 @@ class LoadingTracksCollectionsList extends StatefulWidget { } class _LoadingTracksCollectionsListState extends State { - final LoadingTracksCollectionsListBloc _bloc = injector.get(); + final LoadingTracksCollectionsListCubit _cubit = injector.get(); - final GlobalKey animatedListKey = GlobalKey(); + final GlobalKey animatedListKey = GlobalKey(); final List currentList = List.empty(growable: true); @override void initState() { - _bloc.add(LoadingTracksCollectionsListLoad()); + _cubit.load(); super.initState(); } @@ -30,50 +31,45 @@ class _LoadingTracksCollectionsListState extends State( - bloc: _bloc, - listener: (context, state) { - if (state is LoadingTracksCollectionsListLoaded) { - setState(() { - _updateCurrentList(state.loadingCollectionsObservers); - }); - } - }, - builder: (context, state) { - if (state is LoadingTracksCollectionsListLoaded) { - if (currentList.isNotEmpty) { - return SliverAnimatedList( - key: animatedListKey, - initialItemCount: currentList.length, - itemBuilder: (context, index, animate) => _buildAnimatedTile(context, currentList[index], animate)); + return BlocListener( + bloc: _cubit, + listener: (context, state) { + if (state is LoadingTracksCollectionsListLoaded) { + _updateCurrentList(state.loadingCollectionsObservers); + } + }, + child: SliverStack(children: [ + SliverAnimatedList( + key: animatedListKey, + initialItemCount: currentList.length, + itemBuilder: (context, index, animate) => _buildAnimatedTile(context, currentList[index], animate)), + SliverToBoxAdapter(child: BlocBuilder( + bloc: _cubit, + builder: (context, state) { + if (state is LoadingTracksCollectionsListLoaded && currentList.isEmpty) { + return Text(S.of(context).tracksDontLoad, + style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)); } - return SliverToBoxAdapter( - child: Text(S.of(context).tracksDontLoad, - style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)), - ); - } - - if (state is LoadingTracksCollectionsListInitial) { - return SliverToBoxAdapter( - child: Container( + if (state is LoadingTracksCollectionsListInitial) { + return Container( alignment: Alignment.center, child: const CircularProgressIndicator(), - ), - ); - } + ); + } - if (state is LoadingTracksCollectionsListFailure) { - return SliverToBoxAdapter( - child: Text( + if (state is LoadingTracksCollectionsListFailure) { + return Text( S.of(context).errorOccurredWhileLoadingActiveDownloads( state.failure?.message.toString() ?? 'the message isn\'t specified'), - style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)), - ); - } + style: theme.textTheme.labelLarge?.copyWith(color: onBackgroundSecondaryColor)); + } - return const SliverToBoxAdapter(); - }); + return Container(); + }, + )) + ]), + ); } void _updateCurrentList(List newList) { @@ -85,9 +81,10 @@ class _LoadingTracksCollectionsListState extends State _buildAnimatedTile(context, removedItem, animation)); - currentList.remove(removedItem); } for (var newItem in itemsToAdd) { @@ -108,4 +105,4 @@ class _LoadingTracksCollectionsListState extends State { late final BottomNavigationBarObserver _routeObserver; - final GlobalKey _bottomNavigationBarKey = GlobalKey(); - - double? _bottomNavigationBarHeightField; - double? get _bottomNavigationBarHeight => _bottomNavigationBarHeightField; - set _bottomNavigationBarHeight(double? newHeight) { - _bottomNavigationBarHeightField = newHeight; - _bottomNavigationBarHeightStreamController.add(newHeight); - } - - final StreamController _bottomNavigationBarHeightStreamController = StreamController.broadcast(); - @override void initState() { super.initState(); @@ -85,89 +75,397 @@ class _MainScreenState extends State { Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, - body: Stack( - children: [ - AutoRouter( - navigatorObservers: () { - return [_routeObserver]; - }, - builder: (context, content) => StreamBuilder( - stream: _bottomNavigationBarHeightStreamController.stream, - builder: (context, value) { - return CustomBottomNavigationBarAcessor(height: value.data, child: content); - }), - ), - Builder(builder: (context) { - _scheduleBottomNavigationBarHeightUpdate(); - - return StreamBuilder( - initialData: 0, - stream: _currentIndexStreamController.stream, - builder: (context, value) { - return Align( - alignment: Alignment.bottomCenter, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - key: _bottomNavigationBarKey, - padding: const EdgeInsets.only(left: 20, right: 20, top: 10), - alignment: Alignment.bottomCenter, - decoration: const BoxDecoration( - gradient: LinearGradient( - colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], - begin: Alignment.topCenter, - end: Alignment.bottomCenter)), - child: Theme( - data: ThemeData( - splashFactory: NoSplash.splashFactory, - highlightColor: const Color.fromARGB(0, 0, 0, 0), - ), - child: CustomBottomNavigationBar( - iconSize: const Size(25, 25), - labelFontSize: 10, - selectedItemColor: onBackgroundPrimaryColor, - unselectedItemColor: onBackgroundSecondaryColor, - selectingItemColor: onBackgroundThirdRateColor, - selectingSize: 0.9, - animationDuration: const Duration(milliseconds: 50), - currentIndex: value.data!, - onTap: (index) { - if (AutoRouter.of(context).topRoute.name != - _bottomNavigationBarRoutes[index].routeName) { - AutoRouter.of(context).push(_bottomNavigationBarRoutes[index]); - _currentIndex = index; - } - }, - items: [ - CustomBottomNavigationBarItem( - svgIconPath: 'resources/images/svg/bottom_bar/home_icon.svg', - svgActiveIconPath: 'resources/images/svg/bottom_bar/home_icon_active.svg', - label: S.of(context).main), - CustomBottomNavigationBarItem( - svgIconPath: 'resources/images/svg/bottom_bar/history_icon.svg', - svgActiveIconPath: 'resources/images/svg/bottom_bar/history_icon_active.svg', - label: S.of(context).history) - ]), - ), - ), - ], - ), - ); - }); + body: StreamBuilder( + initialData: 0, + stream: _currentIndexStreamController.stream, + builder: (context, value) { + return CustomNavigationBar( + expandBody: true, + verticalContentPadding: const EdgeInsets.only(left: 20, right: 20, top: 17, bottom: 7), + horizontalContentPadding: EdgeInsets.zero, + verticalBackgroundDecorations: const BoxDecoration( + gradient: LinearGradient( + colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter)), + horizontalBackgroundDecorations: const BoxDecoration(), + verticalLabelFontSize: 10, + horizontalLabelFontSize: 12, + iconSize: const Size(25, 25), + selectedItemColor: onBackgroundPrimaryColor, + unselectedItemColor: onBackgroundSecondaryColor, + selectingItemColor: onBackgroundThirdRateColor, + selectingSize: 0.9, + animationDuration: const Duration(milliseconds: 50), + currentIndex: value.data!, + onTap: (index) { + if (AutoRouter.of(context).topRoute.name != _bottomNavigationBarRoutes[index].routeName) { + AutoRouter.of(context).push(_bottomNavigationBarRoutes[index]); + _currentIndex = index; + } + }, + items: [ + CustomNavigationBarItem( + svgIconPath: 'resources/images/svg/bottom_bar/home_icon.svg', + svgActiveIconPath: 'resources/images/svg/bottom_bar/home_icon_active.svg', + label: S.of(context).main), + CustomNavigationBarItem( + svgIconPath: 'resources/images/svg/bottom_bar/history_icon.svg', + svgActiveIconPath: 'resources/images/svg/bottom_bar/history_icon_active.svg', + label: S.of(context).history) + ], + child: AutoRouter( + navigatorObservers: () => [_routeObserver], + )); }), - ], - ), + ); + } +} + +class CustomNavigationBar extends StatefulWidget { + const CustomNavigationBar( + {super.key, + required this.child, + required this.items, + required this.onTap, + required this.currentIndex, + required this.expandBody, + required this.verticalContentPadding, + required this.horizontalContentPadding, + required this.verticalBackgroundDecorations, + required this.horizontalBackgroundDecorations, + required this.verticalLabelFontSize, + required this.horizontalLabelFontSize, + required this.iconSize, + required this.selectingSize, + required this.selectedItemColor, + required this.unselectedItemColor, + required this.selectingItemColor, + required this.animationDuration}); + + final Widget child; + + final List items; + final void Function(int index) onTap; + final int currentIndex; + + final bool expandBody; + final EdgeInsetsGeometry verticalContentPadding; + final EdgeInsetsGeometry horizontalContentPadding; + final BoxDecoration verticalBackgroundDecorations; + final BoxDecoration horizontalBackgroundDecorations; + final double verticalLabelFontSize; + final double horizontalLabelFontSize; + final Size iconSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + + @override + State createState() => _CustomNavigationBarState(); +} + +class _CustomNavigationBarState extends State { + final GlobalKey _bottomNavigationBarKey = GlobalKey(); + + double? _expandedHeightField; + double? get _expandedHeight => _expandedHeightField; + set _expandedHeight(double? newHeight) { + _expandedHeightField = newHeight; + _expandedHeightStreamController.add(newHeight); + } + + final StreamController _expandedHeightStreamController = StreamController.broadcast(); + + @override + Widget build(BuildContext context) { + return OrientationBuilder( + builder: (BuildContext context, Orientation orientation) { + if (orientation == Orientation.portrait) { + _scheduleBottomNavigationBarHeightUpdate(); + return _wrapBottomNavigationBar( + isExpandedBody: widget.expandBody, + child: StreamBuilder( + stream: _expandedHeightStreamController.stream, + builder: (context, value) { + return CustomNavigationBarAcessor(expandedHeight: value.data, child: widget.child); + }), + bottomNavigationBar: CustomBottomNavigationBar( + key: _bottomNavigationBarKey, + items: widget.items, + iconSize: widget.iconSize, + labelFontSize: widget.verticalLabelFontSize, + selectedItemColor: widget.selectedItemColor, + unselectedItemColor: widget.unselectedItemColor, + selectingItemColor: widget.selectingItemColor, + onTap: widget.onTap, + currentIndex: widget.currentIndex, + selectingSize: widget.selectingSize, + animationDuration: widget.animationDuration, + contentPadding: widget.verticalContentPadding, + backgroundDecorations: widget.verticalBackgroundDecorations, + )); + } else { + _expandedHeight = 0; + return Container(); + } + }, ); } + Widget _wrapBottomNavigationBar( + {required bool isExpandedBody, required Widget child, required Widget bottomNavigationBar}) { + if (isExpandedBody) { + return Stack( + children: [child, Align(alignment: Alignment.bottomCenter, child: bottomNavigationBar)], + ); + } else { + return Column( + children: [Expanded(child: child), bottomNavigationBar], + ); + } + } + void _scheduleBottomNavigationBarHeightUpdate() { SchedulerBinding.instance.addPostFrameCallback((_) { - var newBottomNavigationBarHeight = - (_bottomNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; - if (newBottomNavigationBarHeight != _bottomNavigationBarHeight) { - _bottomNavigationBarHeight = newBottomNavigationBarHeight; + var newExpandedHeight = (_bottomNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; + if (newExpandedHeight != _expandedHeight) { + _expandedHeight = newExpandedHeight; } }); } } + +class CustomNavigationBarItem { + CustomNavigationBarItem({required this.svgIconPath, required this.svgActiveIconPath, required this.label}); + + final String svgIconPath; + final String svgActiveIconPath; + final String label; +} + +class CustomBottomNavigationBar extends StatelessWidget { + final List items; + final void Function(int index) onTap; + final int currentIndex; + + final EdgeInsetsGeometry contentPadding; + final BoxDecoration backgroundDecorations; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + + const CustomBottomNavigationBar( + {super.key, + required this.items, + required this.iconSize, + required this.labelFontSize, + required this.selectedItemColor, + required this.unselectedItemColor, + required this.selectingItemColor, + required this.onTap, + required this.currentIndex, + required this.selectingSize, + required this.animationDuration, + required this.contentPadding, + required this.backgroundDecorations}); + + @override + Widget build(BuildContext context) { + int i = 0; + return Column(mainAxisSize: MainAxisSize.min, children: [ + Container( + padding: contentPadding, + alignment: Alignment.bottomCenter, + decoration: backgroundDecorations, + child: Theme( + data: ThemeData( + splashFactory: NoSplash.splashFactory, + highlightColor: const Color.fromARGB(0, 0, 0, 0), + ), + child: Row( + children: items.map((item) { + final isSelected = i == currentIndex; + final itemIndex = i; + i++; + + return Expanded( + child: CustomBottomNavigationBarItemTile( + item: item, + iconSize: iconSize, + labelFontSize: labelFontSize, + selectedItemColor: selectedItemColor, + selectingItemColor: selectingItemColor, + selectingSize: selectingSize, + unselectedItemColor: unselectedItemColor, + isSelected: isSelected, + onTap: () => onTap(itemIndex), + animationDuration: animationDuration, + )); + }).toList(), + ))) + ]); + } +} + +abstract class CustomNavigationBarItemTile extends StatefulWidget { + final CustomNavigationBarItem item; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + final void Function() onTap; + final bool isSelected; + + const CustomNavigationBarItemTile( + {super.key, + required this.iconSize, + required this.labelFontSize, + required this.selectingSize, + required this.selectedItemColor, + required this.unselectedItemColor, + required this.selectingItemColor, + required this.onTap, + required this.isSelected, + required this.item, + required this.animationDuration}); +} + +abstract class CustomNavigationBarItemTileState extends State + with TickerProviderStateMixin { + late final AnimationController _colorAnimationController; + late final AnimationController _sizeAnimationController; + + Animation? sizeAnimation; + Animation? colorAnimation; + + bool isTapping = false; + + Color get initialColor => widget.isSelected ? widget.selectedItemColor : widget.unselectedItemColor; + + @override + void initState() { + super.initState(); + _colorAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); + _sizeAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); + _updateAnimations(); + } + + @override + void didUpdateWidget(covariant T oldWidget) { + if (oldWidget.isSelected != widget.isSelected) { + _updateAnimations(); + } + super.didUpdateWidget(oldWidget); + } + + void _updateAnimations() { + final beginColor = colorAnimation?.value ?? initialColor; + final endColor = isTapping + ? widget.selectingItemColor + : widget.isSelected + ? widget.selectedItemColor + : widget.unselectedItemColor; + + final double beginSize = sizeAnimation?.value ?? 1; + final double endSize = isTapping ? widget.selectingSize : 1; + + if (beginColor != endColor || colorAnimation == null) { + _colorAnimationController.reset(); + colorAnimation = ColorTween(begin: beginColor, end: endColor).animate(_colorAnimationController); + _colorAnimationController.forward(); + } + + if (beginSize != endSize || sizeAnimation == null) { + _sizeAnimationController.reset(); + sizeAnimation = Tween(begin: beginSize, end: endSize).animate(_sizeAnimationController); + _sizeAnimationController.forward(); + } + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTapDown: (details) { + isTapping = true; + _updateAnimations(); + }, + onTapUp: (details) { + isTapping = false; + widget.onTap(); + _updateAnimations(); + }, + onTapCancel: () { + isTapping = false; + _updateAnimations(); + }, + child: AnimatedBuilder( + animation: sizeAnimation!, + builder: (context, _) { + return AnimatedBuilder( + animation: colorAnimation!, + builder: (context, _) { + if (sizeAnimation == null || colorAnimation == null || colorAnimation!.value == null) { + return Container(); + } + return _buildWithAnimations(sizeAnimation!.value, colorAnimation!.value!); + }); + })); + } + + Widget _buildWithAnimations(double animatedSize, Color animatedColor); +} + +class CustomBottomNavigationBarItemTile extends CustomNavigationBarItemTile { + const CustomBottomNavigationBarItemTile( + {super.key, + required super.iconSize, + required super.labelFontSize, + required super.selectingSize, + required super.selectedItemColor, + required super.unselectedItemColor, + required super.selectingItemColor, + required super.onTap, + required super.isSelected, + required super.item, + required super.animationDuration}); + + @override + State createState() => _CustomBottomNavigationBarItemTileState(); +} + +class _CustomBottomNavigationBarItemTileState + extends CustomNavigationBarItemTileState { + @override + Widget _buildWithAnimations(double animatedSize, Color animatedColor) { + return Align( + alignment: Alignment.bottomCenter, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 5), + color: Colors.transparent, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset( + widget.isSelected ? widget.item.svgActiveIconPath : widget.item.svgIconPath, + width: widget.iconSize.width * sizeAnimation!.value, + height: widget.iconSize.height * sizeAnimation!.value, + colorFilter: ColorFilter.mode(colorAnimation!.value!, BlendMode.srcIn), + ), + Text(widget.item.label, + style: TextStyle(color: colorAnimation!.value, fontSize: widget.labelFontSize * sizeAnimation!.value)) + ], + ), + ), + ); + } +} diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart deleted file mode 100644 index d4be334..0000000 --- a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart +++ /dev/null @@ -1,4 +0,0 @@ -export 'custom_bottom_navigation_bar_acessor.dart'; -export 'custom_bottom_navigation_bar_class.dart'; -export 'custom_bottom_navigation_bar_item.dart'; -export 'custom_bottom_navigation_bar_item_tile.dart'; diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart deleted file mode 100644 index ac757b8..0000000 --- a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_acessor.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter/material.dart'; - -class CustomBottomNavigationBarAcessor extends InheritedWidget { - final double? height; - - const CustomBottomNavigationBarAcessor({super.key, required super.child, required this.height}); - - @override - bool updateShouldNotify(covariant CustomBottomNavigationBarAcessor oldWidget) { - return oldWidget.height != height; - } - - static CustomBottomNavigationBarAcessor of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType() as CustomBottomNavigationBarAcessor; -} diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart deleted file mode 100644 index e7d2487..0000000 --- a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_class.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart'; - -import 'custom_bottom_navigation_bar_item_tile.dart'; - -class CustomBottomNavigationBar extends StatelessWidget { - final List items; - final Size iconSize; - final double labelFontSize; - final double selectingSize; - final Color selectedItemColor; - final Color unselectedItemColor; - final Color selectingItemColor; - final Duration animationDuration; - final void Function(int index) onTap; - final int currentIndex; - - const CustomBottomNavigationBar( - {super.key, - required this.items, - required this.iconSize, - required this.labelFontSize, - required this.selectedItemColor, - required this.unselectedItemColor, - required this.selectingItemColor, - required this.onTap, - required this.currentIndex, - required this.selectingSize, - required this.animationDuration}); - - @override - Widget build(BuildContext context) { - int i = 0; - return Padding( - padding: const EdgeInsets.symmetric(vertical: 7), - child: Row( - children: items.map((item) { - final isSelected = i == currentIndex; - final itemIndex = i; - i++; - - return Expanded( - child: CustomBottomNavigationBarItemTile( - item: item, - iconSize: iconSize, - labelFontSize: labelFontSize, - selectedItemColor: selectedItemColor, - selectingItemColor: selectingItemColor, - selectingSize: selectingSize, - unselectedItemColor: unselectedItemColor, - isSelected: isSelected, - onTap: () => onTap(itemIndex), - animationDuration: animationDuration, - )); - }).toList(), - ), - ); - } -} diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart deleted file mode 100644 index 5e50997..0000000 --- a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart +++ /dev/null @@ -1,7 +0,0 @@ -class CustomBottomNavigationBarItem { - CustomBottomNavigationBarItem({required this.svgIconPath, required this.svgActiveIconPath, required this.label}); - - final String svgIconPath; - final String svgActiveIconPath; - final String label; -} diff --git a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart b/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart deleted file mode 100644 index 98b38c2..0000000 --- a/lib/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item_tile.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar_item.dart'; - -class CustomBottomNavigationBarItemTile extends StatefulWidget { - final CustomBottomNavigationBarItem item; - final Size iconSize; - final double labelFontSize; - final double selectingSize; - final Color selectedItemColor; - final Color unselectedItemColor; - final Color selectingItemColor; - final Duration animationDuration; - final void Function() onTap; - final bool isSelected; - - const CustomBottomNavigationBarItemTile( - {super.key, - required this.iconSize, - required this.labelFontSize, - required this.selectingSize, - required this.selectedItemColor, - required this.unselectedItemColor, - required this.selectingItemColor, - required this.onTap, - required this.isSelected, - required this.item, - required this.animationDuration}); - - @override - State createState() => _CustomBottomNavigationBarItemTileState(); -} - - -class _CustomBottomNavigationBarItemTileState extends State with TickerProviderStateMixin { - late final AnimationController _colorAnimationController; - late final AnimationController _sizeAnimationController; - - Animation? sizeAnimation; - Animation? colorAnimation; - - bool isTapping = false; - - Color get initialColor => widget.isSelected ? widget.selectedItemColor : widget.unselectedItemColor; - - @override - void initState() { - super.initState(); - _colorAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); - _sizeAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); - _updateAnimations(); - } - - @override - void didUpdateWidget(covariant CustomBottomNavigationBarItemTile oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.isSelected != widget.isSelected) { - _updateAnimations(); - } - } - - void _updateAnimations() { - final beginColor = colorAnimation?.value ?? initialColor; - final endColor = isTapping - ? widget.selectingItemColor - : widget.isSelected - ? widget.selectedItemColor - : widget.unselectedItemColor; - - final double beginSize = sizeAnimation?.value ?? 1; - final double endSize = isTapping ? widget.selectingSize : 1; - - if (beginColor != endColor || colorAnimation == null) { - _colorAnimationController.reset(); - colorAnimation = ColorTween(begin: beginColor, end: endColor).animate(_colorAnimationController); - _colorAnimationController.forward(); - } - - if (beginSize != endSize || sizeAnimation == null) { - _sizeAnimationController.reset(); - sizeAnimation = Tween(begin: beginSize, end: endSize).animate(_sizeAnimationController); - _sizeAnimationController.forward(); - } - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTapDown: (details) { - isTapping = true; - _updateAnimations(); - }, - onTapUp: (details) { - isTapping = false; - widget.onTap(); - _updateAnimations(); - }, - onTapCancel: () { - isTapping = false; - _updateAnimations(); - }, - child: AnimatedBuilder( - animation: sizeAnimation!, - builder: (context, _) { - return AnimatedBuilder( - animation: colorAnimation!, - builder: (context, _) { - return Align( - alignment: Alignment.bottomCenter, - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 5), - color: Colors.transparent, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SvgPicture.asset( - widget.isSelected ? widget.item.svgActiveIconPath : widget.item.svgIconPath, - width: widget.iconSize.width * sizeAnimation!.value, - height: widget.iconSize.height * sizeAnimation!.value, - colorFilter: ColorFilter.mode(colorAnimation!.value!, BlendMode.srcIn), - ), - Text(widget.item.label, - style: TextStyle( - color: colorAnimation!.value, fontSize: widget.labelFontSize * sizeAnimation!.value)) - ], - ), - ), - ); - }); - })); - } -} - diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart new file mode 100644 index 0000000..e82ff5a --- /dev/null +++ b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class CustomNavigationBarAcessor extends InheritedWidget { + final double? expandedHeight; + + const CustomNavigationBarAcessor({super.key, required super.child, required this.expandedHeight}); + + @override + bool updateShouldNotify(covariant CustomNavigationBarAcessor oldWidget) { + return oldWidget.expandedHeight != expandedHeight; + } + + static CustomNavigationBarAcessor of(BuildContext context) => + context.dependOnInheritedWidgetOfExactType() as CustomNavigationBarAcessor; +} diff --git a/lib/features/presentation/shared/widgets/custom_app_bar.dart b/lib/features/presentation/shared/widgets/custom_app_bar.dart index 7c7a33f..3937ebf 100644 --- a/lib/features/presentation/shared/widgets/custom_app_bar.dart +++ b/lib/features/presentation/shared/widgets/custom_app_bar.dart @@ -1,47 +1,48 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; class CustomAppBar extends StatelessWidget { final String title; final double height; + final Color color; const CustomAppBar({ super.key, required this.title, - this.height = appBarHeight + this.height = appBarHeight, + this.color = backgroundColor }); @override Widget build(BuildContext context) { final theme = Theme.of(context); - return SizedBox( - height: height + MediaQuery.of(context).viewPadding.top, - child: Padding( - padding: EdgeInsets.only(top: MediaQuery.of(context).viewPadding.top), - child: Row( - children: [ - IconButton( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - onPressed: () { - AutoRouter.of(context).pop(); - }, - icon: SvgPicture.asset( - 'resources/images/svg/back_icon.svg', - height: backIconSize, - width: backIconSize, - )), - Padding( - padding: const EdgeInsets.only(left: 10), - child: Text( - title, - style: theme.textTheme.titleSmall, - )), - ], - ), + return Container( + color: color, + height: height, + child: Row( + children: [ + IconButton( + splashColor: Colors.transparent, + highlightColor: Colors.transparent, + onPressed: () { + AutoRouter.of(context).pop(); + }, + icon: SvgPicture.asset( + 'resources/images/svg/back_icon.svg', + height: backIconSize, + width: backIconSize, + )), + Padding( + padding: const EdgeInsets.only(left: 10), + child: Text( + title, + style: theme.textTheme.titleSmall, + )), + ], ), ); } -} +} \ No newline at end of file diff --git a/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart b/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart index cb5a84d..91517ee 100644 --- a/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart +++ b/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_bottom_navigation_bar/custom_bottom_navigation_bar.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart'; class CustomBottomNavigationBarListViewExpander extends StatelessWidget { const CustomBottomNavigationBarListViewExpander({super.key}); @override Widget build(BuildContext context) { - return Container(height: CustomBottomNavigationBarAcessor.of(context).height ?? 0); + return Container(height: CustomNavigationBarAcessor.of(context).expandedHeight ?? 0); } } diff --git a/lib/features/presentation/shared/widgets/custom_main_app_bar.dart b/lib/features/presentation/shared/widgets/custom_main_app_bar.dart index c6caa42..7f703a3 100644 --- a/lib/features/presentation/shared/widgets/custom_main_app_bar.dart +++ b/lib/features/presentation/shared/widgets/custom_main_app_bar.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; class CustomMainAppBar extends StatelessWidget { @@ -6,10 +7,14 @@ class CustomMainAppBar extends StatelessWidget { super.key, required this.title, this.icon, + this.color = backgroundColor, + this.contentPadding, }); final String title; final Widget? icon; + final Color color; + final EdgeInsetsGeometry? contentPadding; @override Widget build(BuildContext context) { @@ -17,11 +22,15 @@ class CustomMainAppBar extends StatelessWidget { return Padding( padding: const EdgeInsets.symmetric(vertical: 20), child: Container( - height: appBarHeight, - alignment: Alignment.centerLeft, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [Text(title, style: theme.textTheme.titleLarge), if (icon != null) icon!], + color: color, + padding: contentPadding ?? EdgeInsets.zero, + child: Container( + height: appBarHeight, + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [Text(title, style: theme.textTheme.titleLarge), if (icon != null) icon!], + ), ), ), ); diff --git a/lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart b/lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart similarity index 63% rename from lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart rename to lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart index 074dd87..f5fe567 100644 --- a/lib/features/presentation/shared/widgets/screen_with_custom_app_bar.dart +++ b/lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart @@ -11,15 +11,17 @@ class ScrollableScreenWithCustomAppBar extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - body: Column( - children: [ - CustomAppBar(title: title), - Expanded( - child: SingleChildScrollView( - child: Padding(padding: screenWithCustomAppBarPadding, child: body), + body: SafeArea( + child: Column( + children: [ + CustomAppBar(title: title), + Expanded( + child: SingleChildScrollView( + child: Padding(padding: screenWithCustomAppBarPadding, child: body), + ), ), - ), - ], + ], + ), ), ); } diff --git a/lib/features/presentation/shared/widgets/search_text_field.dart b/lib/features/presentation/shared/widgets/search_text_field.dart index 53081f5..b43de8a 100644 --- a/lib/features/presentation/shared/widgets/search_text_field.dart +++ b/lib/features/presentation/shared/widgets/search_text_field.dart @@ -112,3 +112,9 @@ class _SearchTextFieldState extends State { ); } } + +class CustomScrollController extends ScrollController { + @override + // TODO: implement positions + Iterable get positions => super.positions; +} diff --git a/lib/features/presentation/shared/widgets/tap_animated_container.dart b/lib/features/presentation/shared/widgets/tap_animated_container.dart new file mode 100644 index 0000000..48647ec --- /dev/null +++ b/lib/features/presentation/shared/widgets/tap_animated_container.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; + +class TapAnimatedContainer extends StatefulWidget { + final void Function()? onTap; + final Widget child; + final Color tappingMaskColor; + final double tappingScale; + final Duration duration; + final Curve curve; + + const TapAnimatedContainer( + {super.key, + required this.child, + required this.tappingMaskColor, + required this.tappingScale, + this.duration = tappingAnimationDuration, + this.curve = Curves.easeIn, + this.onTap}); + + @override + State createState() => _TapAnimatedContainerState(); +} + +class _TapAnimatedContainerState extends State { + bool isTapping = false; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + widget.onTap?.call(); + }, + onTapDown: (details) { + setState(() { + isTapping = true; + }); + }, + onTapUp: (details) { + setState(() { + isTapping = false; + }); + }, + onTapCancel: () { + setState(() { + isTapping = false; + }); + }, + child: AnimatedScale( + duration: widget.duration, + curve: widget.curve, + scale: isTapping ? widget.tappingScale : 1, + child: Stack( + children: [ + widget.child, + Positioned.fill( + child: AnimatedOpacity( + duration: widget.duration, + opacity: isTapping ? 1 : 0, + child: Container(color: widget.tappingMaskColor), + )) + ], + ), + ), + ); + } +} diff --git a/lib/features/presentation/shared/widgets/widgets.dart b/lib/features/presentation/shared/widgets/widgets.dart index ff0366e..b84aeea 100644 --- a/lib/features/presentation/shared/widgets/widgets.dart +++ b/lib/features/presentation/shared/widgets/widgets.dart @@ -3,6 +3,7 @@ export 'custom_bottom_navigation_bar_list_view_expander.dart'; export 'custom_main_app_bar.dart'; export 'custom_sliver_persistent_header_delegate.dart'; export 'network_failure_splash.dart'; -export 'screen_with_custom_app_bar.dart'; +export 'scrollable_screen_with_custom_app_bar.dart'; export 'search_text_field.dart'; export 'strange_optimized_circular_progress_indicator.dart'; +export 'tap_animated_container.dart'; diff --git a/pubspec.lock b/pubspec.lock index b839ec5..40e426f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -981,6 +981,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.27.7" + scrollbar_ultima: + dependency: "direct main" + description: + name: scrollbar_ultima + sha256: "06550be76752230c63e1698b21454449774f5af3ef297b205b34a6afbd46f661" + url: "https://pub.dev" + source: hosted + version: "1.0.1" shelf: dependency: transitive description: @@ -1331,5 +1339,5 @@ packages: source: hosted version: "2.0.4" sdks: - dart: ">=3.3.0 <3.11.0" + dart: ">=3.4.3 <3.11.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.yaml b/pubspec.yaml index 42772bd..6a944f8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,6 +43,7 @@ dependencies: flexible_scrollbar: ^0.1.3 async: ^2.11.0 sliver_tools: ^0.2.12 + scrollbar_ultima: ^1.0.1 dev_dependencies: flutter_test: From 2ab63a72daafe839dcb12ea15663f32894e53c70 Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Wed, 24 Jul 2024 20:56:25 +1000 Subject: [PATCH 24/41] Added custom navigation bar, that depend to orientation --- lib/core/app/colors/colors.dart | 4 +- lib/core/app/themes/text_themes.dart | 7 + lib/core/app/themes/themes.dart | 5 +- .../view/change_source_video_screen.dart | 16 +- .../blocs/get_tracks/get_tracks_bloc.dart | 2 +- .../blocs/get_tracks/get_tracks_state.dart | 4 +- .../base/get_tracks_collection_bloc.dart | 2 +- .../base/get_tracks_collection_state.dart | 4 +- .../download_tracks_collection_screen.dart | 54 +-- .../history/view/history_screen.dart | 2 + .../presentation/home/view/home_screen.dart | 4 +- .../presentation/main/view/main_screen.dart | 403 ++---------------- .../custom_navigation_bar_acessor.dart | 15 - .../orientated_navigation_bar/base/base.dart | 2 + .../base/orientated_navigation_bar_item.dart | 7 + .../orientated_navigation_bar_item_tile.dart | 117 +++++ .../horizontal_navigaiton_bar.dart | 3 + .../horizontal_navigation_bar_class.dart | 60 +++ .../horizontal_navigation_bar_item_tile.dart | 61 +++ .../horizontal_navigation_bar_theme.dart | 34 ++ .../orientated_navigation_bar.dart | 5 + .../orientated_navigation_bar_acessor.dart | 15 + .../orientated_navigation_bar_class.dart | 98 +++++ .../vertical_navigation_bar.dart | 3 + .../vertical_navigation_bar_class.dart | 58 +++ .../vertical_navigation_bar_item_tile.dart | 51 +++ .../vertical_navigation_bar_theme.dart | 30 ++ ...tom_navigation_bar_list_view_expander.dart | 4 +- .../shared/widgets/custom_scrollbar.dart | 0 ...scrollable_screen_with_custom_app_bar.dart | 4 +- .../shared/widgets/search_text_field.dart | 8 +- 31 files changed, 644 insertions(+), 438 deletions(-) delete mode 100644 lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/base/base.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item_tile.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigaiton_bar.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_class.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_item_tile.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_theme.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_acessor.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_class.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_item_tile.dart create mode 100644 lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_theme.dart create mode 100644 lib/features/presentation/shared/widgets/custom_scrollbar.dart diff --git a/lib/core/app/colors/colors.dart b/lib/core/app/colors/colors.dart index 1ff367b..69c5239 100644 --- a/lib/core/app/colors/colors.dart +++ b/lib/core/app/colors/colors.dart @@ -22,4 +22,6 @@ const searchFieldHintColor = Color.fromARGB(255, 59, 59, 59); const dialogColor = Color.fromARGB(255, 59, 59, 59); -const tilePlaceholderColor = Color.fromARGB(255, 59, 59, 59); \ No newline at end of file +const tilePlaceholderColor = Color.fromARGB(255, 59, 59, 59); + +const horizontalNavigationBarColor = Color.fromARGB(255, 30, 30, 30); diff --git a/lib/core/app/themes/text_themes.dart b/lib/core/app/themes/text_themes.dart index fe06b84..e1d528c 100644 --- a/lib/core/app/themes/text_themes.dart +++ b/lib/core/app/themes/text_themes.dart @@ -55,3 +55,10 @@ const _labelMedium = TextStyle( color: onBackgroundPrimaryColor, fontSize: 12, overflow: TextOverflow.ellipsis); + +const _labelSmall = TextStyle( + fontFamily: 'OpenSans', + fontWeight: FontWeight.w400, + color: onBackgroundPrimaryColor, + fontSize: 10, + overflow: TextOverflow.ellipsis); diff --git a/lib/core/app/themes/themes.dart b/lib/core/app/themes/themes.dart index 20852e1..b5a92fd 100644 --- a/lib/core/app/themes/themes.dart +++ b/lib/core/app/themes/themes.dart @@ -72,7 +72,8 @@ final mainTheme = ThemeData( bodyMedium: _bodyMedium, bodySmall: _bodySmall, labelLarge: _labelLarge, - labelMedium: _labelMedium), + labelMedium: _labelMedium, + labelSmall: _labelSmall), textSelectionTheme: const TextSelectionThemeData( cursorColor: primaryColor, selectionHandleColor: primaryColor, @@ -86,7 +87,7 @@ void initTheme() { systemNavigationBarColor: Colors.transparent, ), ); -} +} void showBigTextSnackBar(String message, BuildContext context, [Duration duration = const Duration(seconds: 2)]) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( diff --git a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart index 1825a52..06af6a0 100644 --- a/lib/features/presentation/change_source_video/view/change_source_video_screen.dart +++ b/lib/features/presentation/change_source_video/view/change_source_video_screen.dart @@ -41,6 +41,8 @@ class _ChangeSourceVideoScreenState extends State { popPage(context); }, child: SafeArea( + left: false, + right: false, child: Scaffold( body: Column( children: [ @@ -64,7 +66,7 @@ class _ChangeSourceVideoScreenState extends State { itemBuilder: (context, index) { final video = state.videos[index]; final isVideoSelected = video == state.selectedVideo; - + return InkWell( splashColor: onSurfaceSplashColor, highlightColor: onSurfaceHighlightColor, @@ -72,7 +74,8 @@ class _ChangeSourceVideoScreenState extends State { .add(ChangeSourceVideoChangeSelectedVideo(selectedVideo: video)), child: Container( color: isVideoSelected ? onSurfaceHighlightColor : Colors.transparent, - padding: const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), + padding: + const EdgeInsets.symmetric(vertical: 10, horizontal: horizontalPadding), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -117,18 +120,19 @@ class _ChangeSourceVideoScreenState extends State { ], ); } - + if (state is ChangeSourceVideoNetworkFailure) { return NetworkFailureSplash( onRetryAgainButtonClicked: () => _changeSourceVideoBloc .add(ChangeSourceVideoLoad(selectedVideoUrl: widget.track.youtubeUrl))); } - + if (state is ChangeSourceVideoLoading) { return const Center( - child: SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); + child: + SizedBox(height: 41, width: 41, child: StrangeOptimizedCircularProgressIndicator())); } - + return Container(); }, ), diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart index 05e2816..4f19faa 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_bloc.dart @@ -149,7 +149,7 @@ class GetTracksBloc extends Bloc { if (failure is NetworkFailure) { return _getNetworkFailureState(); } - return GetTracksFailure(failure: failure); + return GetTracksFatalFailure(failure: failure); } GetTracksState _getNetworkFailureState() { diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart index d3f45b5..28f9b36 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks/get_tracks_state.dart @@ -52,8 +52,8 @@ final class GetTracksAfterPartGotNetworkFailure extends GetTracksTracksGot { final class GetTracksBeforePartGotNetworkFailure extends GetTracksState {} -final class GetTracksFailure extends GetTracksState { - const GetTracksFailure({required this.failure}); +final class GetTracksFatalFailure extends GetTracksState { + const GetTracksFatalFailure({required this.failure}); final Failure? failure; diff --git a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart index d6d81d6..2cc2665 100644 --- a/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart +++ b/lib/features/presentation/download_tracks_collection/blocs/get_tracks_collection/base/get_tracks_collection_bloc.dart @@ -38,7 +38,7 @@ abstract class GetTracksCollectionBloc extends Bloc get props => [tracksCollection]; } -final class GetTracksCollectionFailure extends GetTracksCollectionState { - const GetTracksCollectionFailure({required this.failure}); +final class GetTracksCollectionFatalFailure extends GetTracksCollectionState { + const GetTracksCollectionFatalFailure({required this.failure}); final Failure? failure; diff --git a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart index 8f10150..3f6f9f4 100644 --- a/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart +++ b/lib/features/presentation/download_tracks_collection/view/download_tracks_collection_screen.dart @@ -16,7 +16,7 @@ import 'package:spotify_downloader/features/data_domain/tracks_collections/histo import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/view/download_track_info.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/widgets.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_acessor.dart'; import 'package:spotify_downloader/features/presentation/shared/widgets/widgets.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -136,7 +136,7 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _getTracksBloc, listener: (context, state) { - if (state is GetTracksFailure) { + if (state is GetTracksFatalFailure) { _onFatalFailure(state.failure); return; } @@ -168,6 +168,8 @@ class _DownloadTracksCollectionScreenState extends State( @@ -207,35 +209,17 @@ class _DownloadTracksCollectionScreenState extends State( - begin: const Offset(1, 0), - end: const Offset(0, 0) - ).animate(animation); - return SlideTransition( - position: animatedPosition, - child: Padding( - padding: const EdgeInsets.only(left: 5, right: 7), - child: Container( - height: 50, - width: 5, - decoration: BoxDecoration( - color: widgetStates.contains(WidgetState.dragged) - ? primaryColor - : onBackgroundSecondaryColor, - borderRadius: BorderRadius.circular(2.5))), - ), - ); - }, + isFixedScroll: true, + thumbBuilder: _buildThumb, child: Builder(builder: (context) { return Builder(builder: (context) { - scheduleHeaderHeightUpdate(); + _scheduleHeaderHeightUpdate(); return CustomScrollView( controller: _scrollController, slivers: [ @@ -253,8 +237,9 @@ class _DownloadTracksCollectionScreenState extends State( bloc: _filterTracksBloc, builder: (context, state) { - if (state is! FilterTracksChanged) + if (state is! FilterTracksChanged) { return const SliverToBoxAdapter(); + } final filteredTracks = state.filteredTracks; final isTracksPlaceholdersDisplayed = getTracksState @@ -369,7 +354,22 @@ class _DownloadTracksCollectionScreenState extends State animation, Set widgetStates) { + final animatedPosition = Tween(begin: const Offset(1, 0), end: const Offset(0, 0)).animate(animation); + return SlideTransition( + position: animatedPosition, + child: Container( + color: Colors.transparent, + padding: const EdgeInsets.only(left: 10, right: 7), + child: Container( + height: 50, + width: 5, + decoration: BoxDecoration( + color: widgetStates.contains(WidgetState.dragged) ? primaryColor : onBackgroundSecondaryColor, + borderRadius: BorderRadius.circular(2.5))))); + } + + void _scheduleHeaderHeightUpdate() { SchedulerBinding.instance.addPostFrameCallback((_) { var newHeaderHeight = (_headerKey.currentContext!.findRenderObject() as RenderSliver).geometry?.scrollExtent; if (_headerHeight != newHeaderHeight) { diff --git a/lib/features/presentation/history/view/history_screen.dart b/lib/features/presentation/history/view/history_screen.dart index 21fc7f6..bb2c74a 100644 --- a/lib/features/presentation/history/view/history_screen.dart +++ b/lib/features/presentation/history/view/history_screen.dart @@ -34,6 +34,8 @@ class _HistoryScreenState extends State with AutoRouteAwareStateM return Scaffold( resizeToAvoidBottomInset: false, body: SafeArea( + left: false, + right: false, child: Column( children: [ CustomMainAppBar( diff --git a/lib/features/presentation/home/view/home_screen.dart b/lib/features/presentation/home/view/home_screen.dart index d282ca3..f0e1b66 100644 --- a/lib/features/presentation/home/view/home_screen.dart +++ b/lib/features/presentation/home/view/home_screen.dart @@ -36,6 +36,8 @@ class _HomeScreenState extends State { return Scaffold( resizeToAvoidBottomInset: false, body: SafeArea( + left: false, + right: false, child: Padding( padding: const EdgeInsets.symmetric(horizontal: horizontalPadding), child: Column( @@ -116,7 +118,7 @@ class _HomeScreenState extends State { ), ), SliverPadding( - padding: const EdgeInsets.only(top: 40), + padding: const EdgeInsets.only(top: 40, bottom: 40), sliver: MultiSliver( children: [ SliverToBoxAdapter( diff --git a/lib/features/presentation/main/view/main_screen.dart b/lib/features/presentation/main/view/main_screen.dart index ba1c002..c1fbcae 100644 --- a/lib/features/presentation/main/view/main_screen.dart +++ b/lib/features/presentation/main/view/main_screen.dart @@ -2,15 +2,14 @@ import 'dart:async'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:spotify_downloader/core/app/colors/colors.dart'; import 'package:spotify_downloader/core/app/router/router.dart'; +import 'package:spotify_downloader/core/app/themes/theme_consts.dart'; import 'package:spotify_downloader/core/di/injector.dart'; import 'package:spotify_downloader/core/permissions/permissions_manager.dart'; import 'package:spotify_downloader/core/permissions/requiring_permission_services_initializer.dart'; import 'package:spotify_downloader/features/presentation/main/tools/bottom_navigation_bar_observer.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart'; import 'package:spotify_downloader/features/presentation/permissions_dialog/view/permissions_dialog.dart'; import 'package:spotify_downloader/generated/l10n.dart'; @@ -79,24 +78,36 @@ class _MainScreenState extends State { initialData: 0, stream: _currentIndexStreamController.stream, builder: (context, value) { - return CustomNavigationBar( + return OrientatedNavigationBar( expandBody: true, - verticalContentPadding: const EdgeInsets.only(left: 20, right: 20, top: 17, bottom: 7), - horizontalContentPadding: EdgeInsets.zero, - verticalBackgroundDecorations: const BoxDecoration( - gradient: LinearGradient( - colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], - begin: Alignment.topCenter, - end: Alignment.bottomCenter)), - horizontalBackgroundDecorations: const BoxDecoration(), - verticalLabelFontSize: 10, - horizontalLabelFontSize: 12, - iconSize: const Size(25, 25), - selectedItemColor: onBackgroundPrimaryColor, - unselectedItemColor: onBackgroundSecondaryColor, - selectingItemColor: onBackgroundThirdRateColor, - selectingSize: 0.9, - animationDuration: const Duration(milliseconds: 50), + horizontalNavigationBarTheme: HorizontalNavigationBarTheme( + width: 200, + itemContentHeight: 55, + contentPadding: const EdgeInsets.only(left: horizontalPadding, top: 10), + backgroundDecorations: const BoxDecoration(color: horizontalNavigationBarColor), + labelFontSize: Theme.of(context).textTheme.labelMedium!.fontSize!, + iconSize: const Size(25, 25), + selectedItemColor: onBackgroundPrimaryColor, + unselectedItemColor: onBackgroundSecondaryColor, + selectingItemColor: onBackgroundThirdRateColor, + selectingSize: 0.9, + animationDuration: const Duration(milliseconds: 100), + ), + verticalNavigationBarTheme: VerticalNavigationBarTheme( + contentPadding: const EdgeInsets.only(left: 20, right: 20, top: 17, bottom: 7), + backgroundDecorations: const BoxDecoration( + gradient: LinearGradient( + colors: [Color.fromARGB(0, 0, 0, 0), Color.fromARGB(230, 0, 0, 0)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter)), + labelFontSize: Theme.of(context).textTheme.labelSmall!.fontSize!, + iconSize: const Size(25, 25), + selectedItemColor: onBackgroundPrimaryColor, + unselectedItemColor: onBackgroundSecondaryColor, + selectingItemColor: onBackgroundThirdRateColor, + selectingSize: 0.9, + animationDuration: const Duration(milliseconds: 50), + ), currentIndex: value.data!, onTap: (index) { if (AutoRouter.of(context).topRoute.name != _bottomNavigationBarRoutes[index].routeName) { @@ -105,11 +116,11 @@ class _MainScreenState extends State { } }, items: [ - CustomNavigationBarItem( + OrientatedNavigationBarItem( svgIconPath: 'resources/images/svg/bottom_bar/home_icon.svg', svgActiveIconPath: 'resources/images/svg/bottom_bar/home_icon_active.svg', label: S.of(context).main), - CustomNavigationBarItem( + OrientatedNavigationBarItem( svgIconPath: 'resources/images/svg/bottom_bar/history_icon.svg', svgActiveIconPath: 'resources/images/svg/bottom_bar/history_icon_active.svg', label: S.of(context).history) @@ -121,351 +132,3 @@ class _MainScreenState extends State { ); } } - -class CustomNavigationBar extends StatefulWidget { - const CustomNavigationBar( - {super.key, - required this.child, - required this.items, - required this.onTap, - required this.currentIndex, - required this.expandBody, - required this.verticalContentPadding, - required this.horizontalContentPadding, - required this.verticalBackgroundDecorations, - required this.horizontalBackgroundDecorations, - required this.verticalLabelFontSize, - required this.horizontalLabelFontSize, - required this.iconSize, - required this.selectingSize, - required this.selectedItemColor, - required this.unselectedItemColor, - required this.selectingItemColor, - required this.animationDuration}); - - final Widget child; - - final List items; - final void Function(int index) onTap; - final int currentIndex; - - final bool expandBody; - final EdgeInsetsGeometry verticalContentPadding; - final EdgeInsetsGeometry horizontalContentPadding; - final BoxDecoration verticalBackgroundDecorations; - final BoxDecoration horizontalBackgroundDecorations; - final double verticalLabelFontSize; - final double horizontalLabelFontSize; - final Size iconSize; - final double selectingSize; - final Color selectedItemColor; - final Color unselectedItemColor; - final Color selectingItemColor; - final Duration animationDuration; - - @override - State createState() => _CustomNavigationBarState(); -} - -class _CustomNavigationBarState extends State { - final GlobalKey _bottomNavigationBarKey = GlobalKey(); - - double? _expandedHeightField; - double? get _expandedHeight => _expandedHeightField; - set _expandedHeight(double? newHeight) { - _expandedHeightField = newHeight; - _expandedHeightStreamController.add(newHeight); - } - - final StreamController _expandedHeightStreamController = StreamController.broadcast(); - - @override - Widget build(BuildContext context) { - return OrientationBuilder( - builder: (BuildContext context, Orientation orientation) { - if (orientation == Orientation.portrait) { - _scheduleBottomNavigationBarHeightUpdate(); - return _wrapBottomNavigationBar( - isExpandedBody: widget.expandBody, - child: StreamBuilder( - stream: _expandedHeightStreamController.stream, - builder: (context, value) { - return CustomNavigationBarAcessor(expandedHeight: value.data, child: widget.child); - }), - bottomNavigationBar: CustomBottomNavigationBar( - key: _bottomNavigationBarKey, - items: widget.items, - iconSize: widget.iconSize, - labelFontSize: widget.verticalLabelFontSize, - selectedItemColor: widget.selectedItemColor, - unselectedItemColor: widget.unselectedItemColor, - selectingItemColor: widget.selectingItemColor, - onTap: widget.onTap, - currentIndex: widget.currentIndex, - selectingSize: widget.selectingSize, - animationDuration: widget.animationDuration, - contentPadding: widget.verticalContentPadding, - backgroundDecorations: widget.verticalBackgroundDecorations, - )); - } else { - _expandedHeight = 0; - return Container(); - } - }, - ); - } - - Widget _wrapBottomNavigationBar( - {required bool isExpandedBody, required Widget child, required Widget bottomNavigationBar}) { - if (isExpandedBody) { - return Stack( - children: [child, Align(alignment: Alignment.bottomCenter, child: bottomNavigationBar)], - ); - } else { - return Column( - children: [Expanded(child: child), bottomNavigationBar], - ); - } - } - - void _scheduleBottomNavigationBarHeightUpdate() { - SchedulerBinding.instance.addPostFrameCallback((_) { - var newExpandedHeight = (_bottomNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; - if (newExpandedHeight != _expandedHeight) { - _expandedHeight = newExpandedHeight; - } - }); - } -} - -class CustomNavigationBarItem { - CustomNavigationBarItem({required this.svgIconPath, required this.svgActiveIconPath, required this.label}); - - final String svgIconPath; - final String svgActiveIconPath; - final String label; -} - -class CustomBottomNavigationBar extends StatelessWidget { - final List items; - final void Function(int index) onTap; - final int currentIndex; - - final EdgeInsetsGeometry contentPadding; - final BoxDecoration backgroundDecorations; - final Size iconSize; - final double labelFontSize; - final double selectingSize; - final Color selectedItemColor; - final Color unselectedItemColor; - final Color selectingItemColor; - final Duration animationDuration; - - const CustomBottomNavigationBar( - {super.key, - required this.items, - required this.iconSize, - required this.labelFontSize, - required this.selectedItemColor, - required this.unselectedItemColor, - required this.selectingItemColor, - required this.onTap, - required this.currentIndex, - required this.selectingSize, - required this.animationDuration, - required this.contentPadding, - required this.backgroundDecorations}); - - @override - Widget build(BuildContext context) { - int i = 0; - return Column(mainAxisSize: MainAxisSize.min, children: [ - Container( - padding: contentPadding, - alignment: Alignment.bottomCenter, - decoration: backgroundDecorations, - child: Theme( - data: ThemeData( - splashFactory: NoSplash.splashFactory, - highlightColor: const Color.fromARGB(0, 0, 0, 0), - ), - child: Row( - children: items.map((item) { - final isSelected = i == currentIndex; - final itemIndex = i; - i++; - - return Expanded( - child: CustomBottomNavigationBarItemTile( - item: item, - iconSize: iconSize, - labelFontSize: labelFontSize, - selectedItemColor: selectedItemColor, - selectingItemColor: selectingItemColor, - selectingSize: selectingSize, - unselectedItemColor: unselectedItemColor, - isSelected: isSelected, - onTap: () => onTap(itemIndex), - animationDuration: animationDuration, - )); - }).toList(), - ))) - ]); - } -} - -abstract class CustomNavigationBarItemTile extends StatefulWidget { - final CustomNavigationBarItem item; - final Size iconSize; - final double labelFontSize; - final double selectingSize; - final Color selectedItemColor; - final Color unselectedItemColor; - final Color selectingItemColor; - final Duration animationDuration; - final void Function() onTap; - final bool isSelected; - - const CustomNavigationBarItemTile( - {super.key, - required this.iconSize, - required this.labelFontSize, - required this.selectingSize, - required this.selectedItemColor, - required this.unselectedItemColor, - required this.selectingItemColor, - required this.onTap, - required this.isSelected, - required this.item, - required this.animationDuration}); -} - -abstract class CustomNavigationBarItemTileState extends State - with TickerProviderStateMixin { - late final AnimationController _colorAnimationController; - late final AnimationController _sizeAnimationController; - - Animation? sizeAnimation; - Animation? colorAnimation; - - bool isTapping = false; - - Color get initialColor => widget.isSelected ? widget.selectedItemColor : widget.unselectedItemColor; - - @override - void initState() { - super.initState(); - _colorAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); - _sizeAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); - _updateAnimations(); - } - - @override - void didUpdateWidget(covariant T oldWidget) { - if (oldWidget.isSelected != widget.isSelected) { - _updateAnimations(); - } - super.didUpdateWidget(oldWidget); - } - - void _updateAnimations() { - final beginColor = colorAnimation?.value ?? initialColor; - final endColor = isTapping - ? widget.selectingItemColor - : widget.isSelected - ? widget.selectedItemColor - : widget.unselectedItemColor; - - final double beginSize = sizeAnimation?.value ?? 1; - final double endSize = isTapping ? widget.selectingSize : 1; - - if (beginColor != endColor || colorAnimation == null) { - _colorAnimationController.reset(); - colorAnimation = ColorTween(begin: beginColor, end: endColor).animate(_colorAnimationController); - _colorAnimationController.forward(); - } - - if (beginSize != endSize || sizeAnimation == null) { - _sizeAnimationController.reset(); - sizeAnimation = Tween(begin: beginSize, end: endSize).animate(_sizeAnimationController); - _sizeAnimationController.forward(); - } - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTapDown: (details) { - isTapping = true; - _updateAnimations(); - }, - onTapUp: (details) { - isTapping = false; - widget.onTap(); - _updateAnimations(); - }, - onTapCancel: () { - isTapping = false; - _updateAnimations(); - }, - child: AnimatedBuilder( - animation: sizeAnimation!, - builder: (context, _) { - return AnimatedBuilder( - animation: colorAnimation!, - builder: (context, _) { - if (sizeAnimation == null || colorAnimation == null || colorAnimation!.value == null) { - return Container(); - } - return _buildWithAnimations(sizeAnimation!.value, colorAnimation!.value!); - }); - })); - } - - Widget _buildWithAnimations(double animatedSize, Color animatedColor); -} - -class CustomBottomNavigationBarItemTile extends CustomNavigationBarItemTile { - const CustomBottomNavigationBarItemTile( - {super.key, - required super.iconSize, - required super.labelFontSize, - required super.selectingSize, - required super.selectedItemColor, - required super.unselectedItemColor, - required super.selectingItemColor, - required super.onTap, - required super.isSelected, - required super.item, - required super.animationDuration}); - - @override - State createState() => _CustomBottomNavigationBarItemTileState(); -} - -class _CustomBottomNavigationBarItemTileState - extends CustomNavigationBarItemTileState { - @override - Widget _buildWithAnimations(double animatedSize, Color animatedColor) { - return Align( - alignment: Alignment.bottomCenter, - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 5), - color: Colors.transparent, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SvgPicture.asset( - widget.isSelected ? widget.item.svgActiveIconPath : widget.item.svgIconPath, - width: widget.iconSize.width * sizeAnimation!.value, - height: widget.iconSize.height * sizeAnimation!.value, - colorFilter: ColorFilter.mode(colorAnimation!.value!, BlendMode.srcIn), - ), - Text(widget.item.label, - style: TextStyle(color: colorAnimation!.value, fontSize: widget.labelFontSize * sizeAnimation!.value)) - ], - ), - ), - ); - } -} diff --git a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart b/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart deleted file mode 100644 index e82ff5a..0000000 --- a/lib/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter/material.dart'; - -class CustomNavigationBarAcessor extends InheritedWidget { - final double? expandedHeight; - - const CustomNavigationBarAcessor({super.key, required super.child, required this.expandedHeight}); - - @override - bool updateShouldNotify(covariant CustomNavigationBarAcessor oldWidget) { - return oldWidget.expandedHeight != expandedHeight; - } - - static CustomNavigationBarAcessor of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType() as CustomNavigationBarAcessor; -} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/base/base.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/base/base.dart new file mode 100644 index 0000000..b8bfb58 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/base/base.dart @@ -0,0 +1,2 @@ +export 'orientated_navigation_bar_item.dart'; +export 'orientated_navigation_bar_item_tile.dart'; diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item.dart new file mode 100644 index 0000000..e8abe85 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item.dart @@ -0,0 +1,7 @@ +class OrientatedNavigationBarItem { + OrientatedNavigationBarItem({required this.svgIconPath, required this.svgActiveIconPath, required this.label}); + + final String svgIconPath; + final String svgActiveIconPath; + final String label; +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item_tile.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item_tile.dart new file mode 100644 index 0000000..de2d295 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item_tile.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart'; + +abstract class OrientatedNavigationBarItemTile extends StatefulWidget { + final OrientatedNavigationBarItem item; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + final Curve animationCurve; + final void Function() onTap; + final bool isSelected; + + const OrientatedNavigationBarItemTile( + {super.key, + required this.iconSize, + required this.labelFontSize, + required this.selectingSize, + required this.selectedItemColor, + required this.unselectedItemColor, + required this.selectingItemColor, + required this.onTap, + required this.isSelected, + required this.item, + required this.animationDuration, + required this.animationCurve}); +} + +abstract class OrientatedNavigationBarItemTileState extends State + with TickerProviderStateMixin { + late final AnimationController _colorAnimationController; + late final AnimationController _sizeAnimationController; + + Animation? sizeAnimation; + Animation? colorAnimation; + + bool isTapping = false; + + Color get initialColor => widget.isSelected ? widget.selectedItemColor : widget.unselectedItemColor; + + @override + void initState() { + super.initState(); + _colorAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); + _sizeAnimationController = AnimationController(vsync: this, duration: widget.animationDuration); + _updateAnimations(); + } + + @override + void didUpdateWidget(covariant T oldWidget) { + if (oldWidget.isSelected != widget.isSelected) { + _updateAnimations(); + } + super.didUpdateWidget(oldWidget); + } + + void _updateAnimations() { + final beginColor = colorAnimation?.value ?? initialColor; + final endColor = isTapping + ? widget.selectingItemColor + : widget.isSelected + ? widget.selectedItemColor + : widget.unselectedItemColor; + + final double beginSize = sizeAnimation?.value ?? 1; + final double endSize = isTapping ? widget.selectingSize : 1; + + if (beginColor != endColor || colorAnimation == null) { + _colorAnimationController.reset(); + colorAnimation = ColorTween(begin: beginColor, end: endColor) + .animate(CurvedAnimation(parent: _colorAnimationController, curve: widget.animationCurve)); + _colorAnimationController.forward(); + } + + if (beginSize != endSize || sizeAnimation == null) { + _sizeAnimationController.reset(); + sizeAnimation = Tween(begin: beginSize, end: endSize) + .animate(CurvedAnimation(parent: _colorAnimationController, curve: widget.animationCurve)); + _sizeAnimationController.forward(); + } + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTapDown: (details) { + isTapping = true; + _updateAnimations(); + }, + onTapUp: (details) { + isTapping = false; + widget.onTap(); + _updateAnimations(); + }, + onTapCancel: () { + isTapping = false; + _updateAnimations(); + }, + child: AnimatedBuilder( + animation: sizeAnimation!, + builder: (context, _) { + return AnimatedBuilder( + animation: colorAnimation!, + builder: (context, _) { + if (sizeAnimation == null || colorAnimation == null || colorAnimation!.value == null) { + return Container(); + } + return buildWithAnimations(sizeAnimation!.value, colorAnimation!.value!); + }); + })); + } + + Widget buildWithAnimations(double sizeAnimation, Color colorAnimation); +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigaiton_bar.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigaiton_bar.dart new file mode 100644 index 0000000..6cb52b4 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigaiton_bar.dart @@ -0,0 +1,3 @@ +export 'horizontal_navigation_bar_class.dart'; +export 'horizontal_navigation_bar_item_tile.dart'; +export 'horizontal_navigation_bar_theme.dart'; diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_class.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_class.dart new file mode 100644 index 0000000..aee5e4e --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_class.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:spotify_downloader/core/app/colors/colors.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart'; + +class HorizontalNavigationBar extends StatelessWidget { + final List items; + final void Function(int index) onTap; + final int currentIndex; + + final HorizontalNavigationBarTheme theme; + + const HorizontalNavigationBar( + {super.key, required this.items, required this.currentIndex, required this.onTap, required this.theme}); + + @override + Widget build(BuildContext context) { + final navigaitonBarTiles = List.empty(growable: true); + for (var i = 0; i < items.length; i++) { + final isSelected = i == currentIndex; + navigaitonBarTiles.add(HorizontalNavigationBarItemTile( + item: items[i], + iconSize: theme.iconSize, + labelFontSize: theme.labelFontSize, + selectedItemColor: theme.selectedItemColor, + selectingItemColor: theme.selectingItemColor, + selectingSize: theme.selectingSize, + unselectedItemColor: theme.unselectedItemColor, + isSelected: isSelected, + onTap: () => onTap(i), + animationDuration: theme.animationDuration, + animationCurve: theme.animationCurve, + textPadding: theme.textPadding, + height: theme.itemContentHeight, + contentPadding: theme.itemContentPadding, + )); + } + + return Row(crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Container(width: MediaQuery.of(context).viewPadding.left, color: backgroundColor), + Container( + padding: theme.contentPadding, + width: theme.width, + alignment: Alignment.topLeft, + decoration: theme.backgroundDecorations, + child: SafeArea( + left: false, + right: false, + child: Theme( + data: ThemeData( + splashFactory: NoSplash.splashFactory, + highlightColor: const Color.fromARGB(0, 0, 0, 0), + ), + child: Column(children: navigaitonBarTiles)), + )), + ], + ); + } +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_item_tile.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_item_tile.dart new file mode 100644 index 0000000..9b9d698 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_item_tile.dart @@ -0,0 +1,61 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/base/orientated_navigation_bar_item_tile.dart'; + +class HorizontalNavigationBarItemTile extends OrientatedNavigationBarItemTile { + final EdgeInsets textPadding; + final double? height; + final EdgeInsets contentPadding; + + const HorizontalNavigationBarItemTile( + {super.key, + required super.iconSize, + required super.labelFontSize, + required super.selectingSize, + required super.selectedItemColor, + required super.unselectedItemColor, + required super.selectingItemColor, + required super.onTap, + required super.isSelected, + required super.item, + required super.animationDuration, + required super.animationCurve, + required this.textPadding, + required this.height, + required this.contentPadding}); + + @override + State createState() => _CustomLeftNavigationBarItemTileState(); +} + +class _CustomLeftNavigationBarItemTileState + extends OrientatedNavigationBarItemTileState { + @override + Widget buildWithAnimations(double animatedSize, Color animatedColor) { + return Align( + alignment: Alignment.centerLeft, + child: Container( + height: widget.height, + padding: widget.contentPadding, + color: Colors.transparent, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset( + widget.isSelected ? widget.item.svgActiveIconPath : widget.item.svgIconPath, + width: widget.iconSize.width * sizeAnimation!.value, + height: widget.iconSize.height * sizeAnimation!.value, + colorFilter: ColorFilter.mode(colorAnimation!.value!, BlendMode.srcIn), + ), + Padding( + padding: widget.textPadding, + child: Text(widget.item.label, + style: + TextStyle(color: colorAnimation!.value, fontSize: widget.labelFontSize * sizeAnimation!.value)), + ) + ], + ), + ), + ); + } +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_theme.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_theme.dart new file mode 100644 index 0000000..faed903 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/horizontal_navigaiton_bar/horizontal_navigation_bar_theme.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +class HorizontalNavigationBarTheme { + final double? width; + final EdgeInsets contentPadding; + final BoxDecoration backgroundDecorations; + final EdgeInsets textPadding; + final EdgeInsets itemContentPadding; + final double? itemContentHeight; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + final Curve animationCurve; + + const HorizontalNavigationBarTheme( + {this.width, + this.contentPadding = EdgeInsets.zero, + this.backgroundDecorations = const BoxDecoration(), + this.itemContentHeight, + this.itemContentPadding = const EdgeInsets.only(bottom: 10), + this.iconSize = const Size(25, 25), + this.textPadding = const EdgeInsets.only(left: 10), + this.labelFontSize = 10, + this.selectingSize = 1.0, + this.selectedItemColor = Colors.white, + this.unselectedItemColor = Colors.white, + this.selectingItemColor = Colors.white, + this.animationDuration = const Duration(milliseconds: 50), + this.animationCurve = Curves.linear}); +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart new file mode 100644 index 0000000..419e6e1 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart @@ -0,0 +1,5 @@ +export 'base/base.dart'; +export 'horizontal_navigaiton_bar/horizontal_navigaiton_bar.dart'; +export 'orientated_navigation_bar_acessor.dart'; +export 'orientated_navigation_bar_class.dart'; +export 'vertical_navigation_bar/vertical_navigation_bar.dart'; diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_acessor.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_acessor.dart new file mode 100644 index 0000000..3eace87 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_acessor.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class OrientatedNavigationBarAcessor extends InheritedWidget { + final double? expandedHeight; + + const OrientatedNavigationBarAcessor({super.key, required super.child, required this.expandedHeight}); + + @override + bool updateShouldNotify(covariant OrientatedNavigationBarAcessor oldWidget) { + return oldWidget.expandedHeight != expandedHeight; + } + + static OrientatedNavigationBarAcessor? maybeOf(BuildContext context) => + context.dependOnInheritedWidgetOfExactType(); +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart new file mode 100644 index 0000000..3c2942b --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart @@ -0,0 +1,98 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart'; + +class OrientatedNavigationBar extends StatefulWidget { + const OrientatedNavigationBar( + {super.key, + required this.items, + required this.onTap, + required this.currentIndex, + this.horizontalNavigationBarTheme = const HorizontalNavigationBarTheme(), + this.verticalNavigationBarTheme = const VerticalNavigationBarTheme(), + required this.expandBody, + required this.child}); + + final Widget child; + + final List items; + final void Function(int index) onTap; + final int currentIndex; + + final HorizontalNavigationBarTheme horizontalNavigationBarTheme; + final VerticalNavigationBarTheme verticalNavigationBarTheme; + final bool expandBody; + + @override + State createState() => _OrientatedNavigationBarState(); +} + +class _OrientatedNavigationBarState extends State { + final GlobalKey _bottomNavigationBarKey = GlobalKey(); + + double? _expandedHeight; + + @override + Widget build(BuildContext context) { + _scheduleExpandedHeightUpdate(); + + return OrientationBuilder( + builder: (BuildContext context, Orientation orientation) { + final child = OrientatedNavigationBarAcessor(expandedHeight: _expandedHeight, child: widget.child); + + if (orientation == Orientation.portrait) { + final verticalNavigationBar = VerticalNavigationBar( + theme: widget.verticalNavigationBarTheme, + items: widget.items, + onTap: widget.onTap, + currentIndex: widget.currentIndex); + + if (widget.expandBody) { + return Stack( + children: [ + child, + Align(alignment: Alignment.bottomCenter, child: verticalNavigationBar) + ], + ); + } else { + return Column( + children: [ + child, + verticalNavigationBar + ], + ); + } + } + + return Row( + children: [ + HorizontalNavigationBar( + theme: widget.horizontalNavigationBarTheme, + items: widget.items, + onTap: widget.onTap, + currentIndex: widget.currentIndex), + Expanded(child: child), + ], + ); + }, + ); + } + + void _scheduleExpandedHeightUpdate() { + SchedulerBinding.instance.addPostFrameCallback((_) { + double? newExpandedHeight; + + if (widget.expandBody) { + newExpandedHeight = (_bottomNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; + } else { + newExpandedHeight = null; + } + + if (newExpandedHeight != _expandedHeight) { + setState(() { + _expandedHeight = newExpandedHeight; + }); + } + }); + } +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar.dart new file mode 100644 index 0000000..b9a8ec1 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar.dart @@ -0,0 +1,3 @@ +export 'vertical_navigation_bar_class.dart'; +export 'vertical_navigation_bar_item_tile.dart'; +export 'vertical_navigation_bar_theme.dart'; diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_class.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_class.dart new file mode 100644 index 0000000..58ec6c6 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_class.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart'; + +class VerticalNavigationBar extends StatelessWidget { + final List items; + final void Function(int index) onTap; + final int currentIndex; + + final VerticalNavigationBarTheme theme; + + const VerticalNavigationBar( + {super.key, required this.items, required this.onTap, required this.currentIndex, required this.theme}); + + @override + Widget build(BuildContext context) { + final navigaitonBarTiles = List.empty(growable: true); + for (var i = 0; i < items.length; i++) { + final isSelected = i == currentIndex; + navigaitonBarTiles.add(Expanded( + child: VerticalNavigationBarItemTile( + item: items[i], + iconSize: theme.iconSize, + itemPadding: theme.itemPadding, + labelFontSize: theme.labelFontSize, + selectedItemColor: theme.selectedItemColor, + selectingItemColor: theme.selectingItemColor, + selectingSize: theme.selectingSize, + unselectedItemColor: theme.unselectedItemColor, + isSelected: isSelected, + onTap: () => onTap(i), + animationDuration: theme.animationDuration, + animationCurve: theme.animationCurve, + ))); + } + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + height: theme.height, + padding: theme.contentPadding, + alignment: Alignment.bottomCenter, + decoration: theme.backgroundDecorations, + child: SafeArea( + left: false, + right: false, + top: false, + child: Theme( + data: ThemeData( + splashFactory: NoSplash.splashFactory, + highlightColor: const Color.fromARGB(0, 0, 0, 0), + ), + child: Row(children: navigaitonBarTiles)), + )), + ], + ); + } +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_item_tile.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_item_tile.dart new file mode 100644 index 0000000..00b6384 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_item_tile.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar.dart'; + +class VerticalNavigationBarItemTile extends OrientatedNavigationBarItemTile { + final EdgeInsets itemPadding; + + const VerticalNavigationBarItemTile( + {super.key, + required super.iconSize, + required super.labelFontSize, + required super.selectingSize, + required super.selectedItemColor, + required super.unselectedItemColor, + required super.selectingItemColor, + required super.onTap, + required super.isSelected, + required super.item, + required super.animationDuration, + required super.animationCurve, + required this.itemPadding}); + + @override + State createState() => _VerticalNavigationBarItemTileState(); +} + +class _VerticalNavigationBarItemTileState extends OrientatedNavigationBarItemTileState { + @override + Widget buildWithAnimations(double animatedSize, Color animatedColor) { + return Align( + alignment: Alignment.center, + child: Container( + padding: widget.itemPadding, + color: Colors.transparent, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset( + widget.isSelected ? widget.item.svgActiveIconPath : widget.item.svgIconPath, + width: widget.iconSize.width * sizeAnimation!.value, + height: widget.iconSize.height * sizeAnimation!.value, + colorFilter: ColorFilter.mode(colorAnimation!.value!, BlendMode.srcIn), + ), + Text(widget.item.label, + style: TextStyle(color: colorAnimation!.value, fontSize: widget.labelFontSize * sizeAnimation!.value)) + ], + ), + ), + ); + } +} diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_theme.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_theme.dart new file mode 100644 index 0000000..3800256 --- /dev/null +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/vertical_navigation_bar/vertical_navigation_bar_theme.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; + +class VerticalNavigationBarTheme { + final double? height; + final EdgeInsets contentPadding; + final BoxDecoration backgroundDecorations; + final EdgeInsets itemPadding; + final Size iconSize; + final double labelFontSize; + final double selectingSize; + final Color selectedItemColor; + final Color unselectedItemColor; + final Color selectingItemColor; + final Duration animationDuration; + final Curve animationCurve; + + const VerticalNavigationBarTheme( + {this.height, + this.contentPadding = EdgeInsets.zero, + this.backgroundDecorations = const BoxDecoration(), + this.itemPadding = const EdgeInsets.symmetric(vertical: 5, horizontal: 15), + this.iconSize = const Size(25, 25), + this.labelFontSize = 10, + this.selectingSize = 1.0, + this.selectedItemColor = Colors.white, + this.unselectedItemColor = Colors.white, + this.selectingItemColor = Colors.white, + this.animationDuration = const Duration(milliseconds: 50), + this.animationCurve = Curves.linear}); +} diff --git a/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart b/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart index 91517ee..3cea68d 100644 --- a/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart +++ b/lib/features/presentation/shared/widgets/custom_bottom_navigation_bar_list_view_expander.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:spotify_downloader/features/presentation/main/widgets/custom_navigation_bar/custom_navigation_bar_acessor.dart'; +import 'package:spotify_downloader/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_acessor.dart'; class CustomBottomNavigationBarListViewExpander extends StatelessWidget { const CustomBottomNavigationBarListViewExpander({super.key}); @override Widget build(BuildContext context) { - return Container(height: CustomNavigationBarAcessor.of(context).expandedHeight ?? 0); + return Container(height: OrientatedNavigationBarAcessor.maybeOf(context)?.expandedHeight ?? 0); } } diff --git a/lib/features/presentation/shared/widgets/custom_scrollbar.dart b/lib/features/presentation/shared/widgets/custom_scrollbar.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart b/lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart index f5fe567..492983e 100644 --- a/lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart +++ b/lib/features/presentation/shared/widgets/scrollable_screen_with_custom_app_bar.dart @@ -12,6 +12,8 @@ class ScrollableScreenWithCustomAppBar extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( body: SafeArea( + left: false, + right: false, child: Column( children: [ CustomAppBar(title: title), @@ -25,4 +27,4 @@ class ScrollableScreenWithCustomAppBar extends StatelessWidget { ), ); } -} \ No newline at end of file +} diff --git a/lib/features/presentation/shared/widgets/search_text_field.dart b/lib/features/presentation/shared/widgets/search_text_field.dart index b43de8a..8ce4ac7 100644 --- a/lib/features/presentation/shared/widgets/search_text_field.dart +++ b/lib/features/presentation/shared/widgets/search_text_field.dart @@ -111,10 +111,4 @@ class _SearchTextFieldState extends State { ), ); } -} - -class CustomScrollController extends ScrollController { - @override - // TODO: implement positions - Iterable get positions => super.positions; -} +} \ No newline at end of file From 92815c320ae2ea7202f0d16e39b56dd43d54fa8b Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Wed, 24 Jul 2024 21:08:50 +1000 Subject: [PATCH 25/41] accessor fix --- .../orientated_navigation_bar_class.dart | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart index 3c2942b..3746aee 100644 --- a/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart +++ b/lib/features/presentation/main/widgets/orientated_navigation_bar/orientated_navigation_bar_class.dart @@ -28,7 +28,7 @@ class OrientatedNavigationBar extends StatefulWidget { } class _OrientatedNavigationBarState extends State { - final GlobalKey _bottomNavigationBarKey = GlobalKey(); + final GlobalKey _verticalNavigationBarKey = GlobalKey(); double? _expandedHeight; @@ -42,6 +42,7 @@ class _OrientatedNavigationBarState extends State { if (orientation == Orientation.portrait) { final verticalNavigationBar = VerticalNavigationBar( + key: _verticalNavigationBarKey, theme: widget.verticalNavigationBarTheme, items: widget.items, onTap: widget.onTap, @@ -49,17 +50,11 @@ class _OrientatedNavigationBarState extends State { if (widget.expandBody) { return Stack( - children: [ - child, - Align(alignment: Alignment.bottomCenter, child: verticalNavigationBar) - ], + children: [child, Align(alignment: Alignment.bottomCenter, child: verticalNavigationBar)], ); } else { return Column( - children: [ - child, - verticalNavigationBar - ], + children: [child, verticalNavigationBar], ); } } @@ -83,7 +78,7 @@ class _OrientatedNavigationBarState extends State { double? newExpandedHeight; if (widget.expandBody) { - newExpandedHeight = (_bottomNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; + newExpandedHeight = (_verticalNavigationBarKey.currentContext?.findRenderObject() as RenderBox?)?.size.height; } else { newExpandedHeight = null; } From 23e8e10f1055465af85aa804e3ff42854d87178d Mon Sep 17 00:00:00 2001 From: Roman Deviaterikov Date: Tue, 30 Jul 2024 17:40:00 +1000 Subject: [PATCH 26/41] made tracks model immutable and also for this reason extract all track changing logic from presentation --- lib/core/app/router/router.gr.dart | 8 +- lib/core/di/injector.dart | 3 - .../entities/track_with_lazy_youtube_url.dart | 16 +- .../dowload_tracks_repository.dart | 2 +- .../track_dto_to_track_converter.dart | 1 - .../download_tracks_service.dart | 8 +- .../download_tracks_service_impl.dart | 72 ++-- .../get_tracks_service_impl.dart | 11 +- .../use_cases/cancel_track_loading.dart | 8 +- .../services/use_cases/download_track.dart | 8 +- .../use_cases/download_tracks_range.dart | 6 +- .../tracks/shared/domain/entities/track.dart | 25 +- .../bloc/change_source_video_bloc.dart | 4 +- .../bloc/change_source_video_state.dart | 3 +- .../view/change_source_video_screen.dart | 13 +- .../download_tracks_cubit.dart | 40 ++- .../download_tracks_state.dart | 15 +- .../download_tracks_collection_screen.dart | 332 ++++++++++-------- .../cubit/download_track_info_cubit.dart | 30 -- .../cubit/download_track_info_state.dart | 8 - .../view/download_track_info.dart | 69 ++-- .../view/download_track_info_status_tile.dart | 25 +- ...download_track_info_status_tile_cubit.dart | 8 +- .../widgets/track_tile/view/track_tile.dart | 13 +- .../view/track_tile_status_button.dart | 27 +- .../horizontal_navigation_bar_class.dart | 4 +- .../orientated_navigation_bar_class.dart | 8 +- 27 files changed, 429 insertions(+), 338 deletions(-) delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart delete mode 100644 lib/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_state.dart diff --git a/lib/core/app/router/router.gr.dart b/lib/core/app/router/router.gr.dart index c60f571..ea74609 100644 --- a/lib/core/app/router/router.gr.dart +++ b/lib/core/app/router/router.gr.dart @@ -28,6 +28,7 @@ abstract class _$AppRouter extends RootStackRouter { child: ChangeSourceVideoScreen( key: args.key, track: args.track, + selectedYoutubeUrl: args.selectedYoutubeUrl, ), ); }, @@ -99,12 +100,14 @@ class ChangeSourceVideoRoute extends PageRouteInfo { ChangeSourceVideoRoute({ Key? key, required Track track, + String? selectedYoutubeUrl, List? children, }) : super( ChangeSourceVideoRoute.name, args: ChangeSourceVideoRouteArgs( key: key, track: track, + selectedYoutubeUrl: selectedYoutubeUrl, ), initialChildren: children, ); @@ -119,15 +122,18 @@ class ChangeSourceVideoRouteArgs { const ChangeSourceVideoRouteArgs({ this.key, required this.track, + this.selectedYoutubeUrl, }); final Key? key; final Track track; + final String? selectedYoutubeUrl; + @override String toString() { - return 'ChangeSourceVideoRouteArgs{key: $key, track: $track}'; + return 'ChangeSourceVideoRouteArgs{key: $key, track: $track, selectedYoutubeUrl: $selectedYoutubeUrl}'; } } diff --git a/lib/core/di/injector.dart b/lib/core/di/injector.dart index 61bd707..99c66ee 100644 --- a/lib/core/di/injector.dart +++ b/lib/core/di/injector.dart @@ -21,7 +21,6 @@ import 'package:spotify_downloader/features/data_domain/tracks_collections/histo import 'package:spotify_downloader/features/data_domain/tracks_collections/network_tracks_collections/network_tracks_collections.dart'; import 'package:spotify_downloader/features/presentation/change_source_video/bloc/change_source_video_bloc.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/blocs/blocs.dart'; -import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/download_track_info/cubit/download_track_info_cubit.dart'; import 'package:spotify_downloader/features/presentation/download_tracks_collection/widgets/shared/cubits/track_loading_observing_cubit/download_track_info_status_tile_cubit.dart'; import 'package:spotify_downloader/features/presentation/history/bloc/history_bloc.dart'; import 'package:spotify_downloader/features/presentation/home/widgets/loading_tracks_collections_list/cubit/loading_tracks_collections_list_cubit.dart'; @@ -208,8 +207,6 @@ void _provideBlocs() { cancelTrackLoading: injector.get())); injector.registerFactory(() => FilterTracksBloc()); - injector.registerFactory( - () => DownloadTrackInfoCubit(cancelTrackLoading: injector.get())); injector.registerFactory(() => TrackLoadingObservingCubit()); injector.registerFactoryParam((track, _) => ChangeSourceVideoBloc( sourceTrack: track, diff --git a/lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart index cbc605b..a3c7c6b 100644 --- a/lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/entities/track_with_lazy_youtube_url.dart @@ -2,20 +2,8 @@ import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; class TrackWithLazyYoutubeUrl { - TrackWithLazyYoutubeUrl({required this.track, required this.getYoutubeUrlFunction}); + TrackWithLazyYoutubeUrl({required this.track, required this.getYoutubeUrl}); final Track track; - final Future> Function() getYoutubeUrlFunction; - - Future> getYoutubeUrl() async { - if (track.youtubeUrl != null) { - return Result.isSuccessful(track.youtubeUrl!); - } else { - final youtubeUrlResult = await getYoutubeUrlFunction.call(); - if (youtubeUrlResult.isSuccessful) { - track.youtubeUrl = youtubeUrlResult.result; - } - return youtubeUrlResult; - } - } + final Future> Function() getYoutubeUrl; } diff --git a/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart b/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart index 10fcce7..02f536b 100644 --- a/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart +++ b/lib/features/data_domain/tracks/download_tracks/domain/repositories/dowload_tracks_repository.dart @@ -4,6 +4,6 @@ import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/dom abstract class DownloadTracksRepository { Future> dowloadTrack(TrackWithLazyYoutubeUrl lazyTrack, String savePath); - Result cancelTrackLoading(Track track, String savePat); + Result cancelTrackLoading(Track track, String savePath); Future> getLoadingTrackObserver(Track track, String savePath); } diff --git a/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart b/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart index 2c486ac..6c0878b 100644 --- a/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart +++ b/lib/features/data_domain/tracks/network_tracks/data/repositories/converters/track_dto_to_track_converter.dart @@ -27,7 +27,6 @@ class TrackDtoToTrackConverter implements ConverterWithParameter a.name!).toList(), album: Album(name: dtoTrack.album?.name, imageUrl: albumImageUrl)); diff --git a/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart index fe26cc8..0e85930 100644 --- a/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart +++ b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service.dart @@ -1,15 +1,13 @@ import 'package:spotify_downloader/core/utils/utils.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/domain/entities/loading_track_observer.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/track.dart'; abstract class DownloadTracksService { - Future> downloadTrack(Track track); + Future> downloadTrack(TrackWithLoadingObserver trackWithLoadingObserver, [String? preselectedYouTubeUrl]); - Future> downloadTracksRange(List tracksWithLoadingObservers); + Future> downloadTracksRange(List tracksWithLoadingObservers, [Map? preselectedYouTubeUrls]); Future> downloadTracksFromGettingObserver( TracksWithLoadingObserverGettingObserver tracksWithLoadingObserverGettingObserver); - Future> cancelTrackLoading(Track track); + Future> cancelTrackLoading(TrackWithLoadingObserver track); } diff --git a/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart index 1386cf5..51aca73 100644 --- a/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/services/services/download_tracks_service/download_tracks_service_impl.dart @@ -8,7 +8,6 @@ import 'package:spotify_downloader/features/data_domain/tracks/search_videos_by_ import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/services/tools/save_path_generator.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/services/tools/tracks_collection_type_to_local_tracks_collection_type_converter.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; class DownloadTracksServiceImpl implements DownloadTracksService { DownloadTracksServiceImpl( @@ -43,16 +42,16 @@ class DownloadTracksServiceImpl implements DownloadTracksService { } @override - Future> downloadTracksRange(List tracksWithLoadingObservers) async { + Future> downloadTracksRange(List tracksWithLoadingObservers, + [Map? preselectedYoutubeUrls]) async { for (var trackWithLoadingObserver in tracksWithLoadingObservers) { if (!trackWithLoadingObserver.track.isLoaded && (trackWithLoadingObserver.loadingObserver == null || trackWithLoadingObserver.loadingObserver!.status == LoadingTrackStatus.failure || trackWithLoadingObserver.loadingObserver!.status == LoadingTrackStatus.loadingCancelled)) { - final trackObserverResult = await downloadTrack(trackWithLoadingObserver.track); - if (trackObserverResult.isSuccessful) { - trackWithLoadingObserver.loadingObserver = trackObserverResult.result; - } else { + final trackObserverResult = + await downloadTrack(trackWithLoadingObserver, preselectedYoutubeUrls?[trackWithLoadingObserver]); + if (!trackObserverResult.isSuccessful) { final fakeLoadingNotifier = TrackLoadingNotifier(); trackWithLoadingObserver.loadingObserver = fakeLoadingNotifier.loadingTrackObserver; fakeLoadingNotifier.loadingFailure(trackObserverResult.failure); @@ -64,18 +63,25 @@ class DownloadTracksServiceImpl implements DownloadTracksService { } @override - Future> downloadTrack(Track track) async { + Future> downloadTrack(TrackWithLoadingObserver trackWithLoadingObserver, + [String? preselectedYoutubeUrl]) async { final getDownloadTracksSettings = await _downloadTracksSettingsRepository.getDownloadTracksSettings(); if (!getDownloadTracksSettings.isSuccessful) { return Result.notSuccessful(getDownloadTracksSettings.failure); } - final String trackSavePath = _savePathGenerator.generateSavePath(track, getDownloadTracksSettings.result!); - final resultTrackObsever = await _dowloadTracksRepository.dowloadTrack( + final String trackSavePath = + _savePathGenerator.generateSavePath(trackWithLoadingObserver.track, getDownloadTracksSettings.result!); + final downloadTrackResult = await _dowloadTracksRepository.dowloadTrack( TrackWithLazyYoutubeUrl( - track: track, - getYoutubeUrlFunction: () async { - final videoResult = await _searchVideosByTrackRepository.findVideoByTrack(track); + track: trackWithLoadingObserver.track, + getYoutubeUrl: () async { + if (preselectedYoutubeUrl != null) { + return Result.isSuccessful(preselectedYoutubeUrl); + } + + final videoResult = + await _searchVideosByTrackRepository.findVideoByTrack(trackWithLoadingObserver.track); if (!videoResult.isSuccessful) { return Result.notSuccessful(videoResult.failure); @@ -88,33 +94,53 @@ class DownloadTracksServiceImpl implements DownloadTracksService { }), trackSavePath); - final serviceTrackObserver = resultTrackObsever.result!; - serviceTrackObserver.loadedStream.listen((savePath) { + if (!downloadTrackResult.isSuccessful) { + return Result.notSuccessful(downloadTrackResult.failure); + } + + downloadTrackResult.result!.loadedStream.listen((savePath) { _localTracksRepository.saveLocalTrack(LocalTrack( - spotifyId: track.spotifyId, + spotifyId: trackWithLoadingObserver.track.spotifyId, savePath: savePath, tracksCollection: getDownloadTracksSettings.result!.saveMode == SaveMode.folderForTracksCollection ? LocalTracksCollection( - spotifyId: track.parentCollection.spotifyId, - type: _collectionTypeConverter.convert(track.parentCollection.type), + spotifyId: trackWithLoadingObserver.track.parentCollection.spotifyId, + type: _collectionTypeConverter.convert(trackWithLoadingObserver.track.parentCollection.type), group: LocalTracksCollectionsGroup(directoryPath: getDownloadTracksSettings.result!.savePath)) : LocalTracksCollection.getAllTracksCollection(getDownloadTracksSettings.result!.savePath), - youtubeUrl: track.youtubeUrl!)); + youtubeUrl: downloadTrackResult.result!.youtubeUrl ?? "")); }); - _observeTracksLoadingRepository.observeLoadingTrack(serviceTrackObserver, track); + _observeTracksLoadingRepository.observeLoadingTrack(downloadTrackResult.result!, trackWithLoadingObserver.track); - return resultTrackObsever; + trackWithLoadingObserver.loadingObserver = downloadTrackResult.result!; + return const Result.isSuccessful(null); } @override - Future> cancelTrackLoading(Track track) async { + Future> cancelTrackLoading(TrackWithLoadingObserver trackWithLoadingObserver) async { + if (trackWithLoadingObserver.loadingObserver == null || + (trackWithLoadingObserver.loadingObserver?.status != LoadingTrackStatus.loading && + trackWithLoadingObserver.loadingObserver?.status != LoadingTrackStatus.waitInLoadingQueue)) { + + trackWithLoadingObserver.loadingObserver = null; + return const Result.isSuccessful(null); + } + final getDownloadTracksSettings = await _downloadTracksSettingsRepository.getDownloadTracksSettings(); if (!getDownloadTracksSettings.isSuccessful) { return Result.notSuccessful(getDownloadTracksSettings.failure); } - final trackSavePath = _savePathGenerator.generateSavePath(track, getDownloadTracksSettings.result!); - return _dowloadTracksRepository.cancelTrackLoading(track, trackSavePath); + final trackSavePath = + _savePathGenerator.generateSavePath(trackWithLoadingObserver.track, getDownloadTracksSettings.result!); + final cancelTrackLoadingResult = + _dowloadTracksRepository.cancelTrackLoading(trackWithLoadingObserver.track, trackSavePath); + if (!cancelTrackLoadingResult.isSuccessful) { + return Result.notSuccessful(cancelTrackLoadingResult.failure); + } + + trackWithLoadingObserver.loadingObserver = null; + return const Result.isSuccessful(null); } } diff --git a/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart b/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart index 53d7ae1..7cb423b 100644 --- a/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart +++ b/lib/features/data_domain/tracks/services/services/get_tracks_service/get_tracks_service_impl.dart @@ -110,8 +110,15 @@ class GetTracksServiceImpl implements GetTracksService { if (localTrack != null) { if (await _checkLocalTrackToExistence(localTrack)) { - track.isLoaded = true; - track.youtubeUrl = localTrack.youtubeUrl; + track = Track( + spotifyId: track.spotifyId, + parentCollection: track.parentCollection, + name: track.name, + album: track.album, + artists: track.artists, + duration: track.duration, + isLoaded: true, + localYoutubeUrl: localTrack.youtubeUrl); } } diff --git a/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart b/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart index eb98904..cedb6a9 100644 --- a/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart +++ b/lib/features/data_domain/tracks/services/use_cases/cancel_track_loading.dart @@ -1,15 +1,15 @@ import 'package:spotify_downloader/core/utils/utils.dart'; +import 'package:spotify_downloader/features/data_domain/tracks/services/entities/entities.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/services/services.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/domain.dart'; -class CancelTrackLoading implements UseCase { +class CancelTrackLoading implements UseCase { CancelTrackLoading({required DownloadTracksService dowloadTracksService}) : _dowloadTracksService = dowloadTracksService; final DownloadTracksService _dowloadTracksService; @override - Future> call(Track track) async { - return _dowloadTracksService.cancelTrackLoading(track); + Future> call(TrackWithLoadingObserver trackWithLoadingObserver) async { + return _dowloadTracksService.cancelTrackLoading(trackWithLoadingObserver); } } diff --git a/lib/features/data_domain/tracks/services/use_cases/download_track.dart b/lib/features/data_domain/tracks/services/use_cases/download_track.dart index 821c6fe..b27f73f 100644 --- a/lib/features/data_domain/tracks/services/use_cases/download_track.dart +++ b/lib/features/data_domain/tracks/services/use_cases/download_track.dart @@ -1,15 +1,13 @@ import 'package:spotify_downloader/core/utils/utils.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/download_tracks/download_tracks.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; -import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/entities.dart'; -class DownloadTrack implements UseCase { +class DownloadTrack implements UseCase { DownloadTrack({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; final DownloadTracksService _downloadTracksService; @override - Future> call(Track track) async { - return _downloadTracksService.downloadTrack(track); + Future> call((TrackWithLoadingObserver trackWithLoadingObserver, String? preselectedTracksYouTubeUrl) params) async { + return _downloadTracksService.downloadTrack(params.$1, params.$2); } } diff --git a/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart b/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart index ac04876..d671db4 100644 --- a/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart +++ b/lib/features/data_domain/tracks/services/use_cases/download_tracks_range.dart @@ -1,13 +1,13 @@ import 'package:spotify_downloader/core/utils/utils.dart'; import 'package:spotify_downloader/features/data_domain/tracks/services/services.dart'; -class DownloadTracksRange implements UseCase> { +class DownloadTracksRange implements UseCase, Map)> { DownloadTracksRange({required DownloadTracksService downloadTracksService}) : _downloadTracksService = downloadTracksService; final DownloadTracksService _downloadTracksService; @override - Future> call(List tracks) async { - return _downloadTracksService.downloadTracksRange(tracks); + Future> call((List tracks, Map preselectedYouTubeUrls) params) async { + return _downloadTracksService.downloadTracksRange(params.$1, params.$2); } } \ No newline at end of file diff --git a/lib/features/data_domain/tracks/shared/domain/entities/track.dart b/lib/features/data_domain/tracks/shared/domain/entities/track.dart index 32bce82..3009e07 100644 --- a/lib/features/data_domain/tracks/shared/domain/entities/track.dart +++ b/lib/features/data_domain/tracks/shared/domain/entities/track.dart @@ -2,24 +2,25 @@ import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/ent import 'package:spotify_downloader/features/data_domain/tracks/shared/domain/entities/album.dart'; class Track { - Track( - {required this.spotifyId, - required this.parentCollection, - this.isLoaded = false, - required this.name, - this.album, - this.youtubeUrl, - this.artists, - this.duration}); + Track({ + required this.spotifyId, + required this.parentCollection, + required this.name, + this.album, + this.artists, + this.duration, + this.localYoutubeUrl, + this.isLoaded = false, + }); final String spotifyId; final String name; final TracksCollection parentCollection; - String? youtubeUrl; - bool isLoaded; - final Album? album; final List? artists; final Duration? duration; + + final String? localYoutubeUrl; + final bool isLoaded; } diff --git a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart index 1be16e5..e5557ad 100644 --- a/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart +++ b/lib/features/presentation/change_source_video/bloc/change_source_video_bloc.dart @@ -39,7 +39,7 @@ class ChangeSourceVideoBloc extends Bloc((event, emit) { _selectedVideo = event.selectedVideo; - emit(ChangeSourceVideoLoaded(videos: _videos, selectedVideo: _selectedVideo)); + emit(ChangeSourceVideoLoaded(videos: _videos, selectedVideo: _selectedVideo, isVideoSelectedByUser: true)); }); } diff --git a/lib/features/presentation/change_source_video/bloc/change_source_video_state.dart b/lib/features/presentation/change_source_video/bloc/change_source_video_state.dart index 636b2e2..3a115db 100644 --- a/lib/features/presentation/change_source_video/bloc/change_source_video_state.dart +++ b/lib/features/presentation/change_source_video/bloc/change_source_video_state.dart @@ -10,9 +10,10 @@ sealed class ChangeSourceVideoState extends Equatable { final class ChangeSourceVideoLoading extends ChangeSourceVideoState {} final class ChangeSourceVideoLoaded extends ChangeSourceVideoState { - const ChangeSourceVideoLoaded({required this.videos, required this.selectedVideo}); + const ChangeSourceVideoLoaded({required this.videos, required this.selectedVideo, required this.isVideoSelectedByUser}); final List