Skip to content
Snippets Groups Projects
Commit e7244ad8 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Clean/move/rename/refactor code

parent 7de05453
No related branches found
No related tags found
1 merge request!31Resolve "Clean / move some code"
Pipeline #4582 passed
Showing
with 121 additions and 80 deletions
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.27 app.versionName=0.0.28
app.versionCode=27 app.versionCode=28
...@@ -9,16 +9,16 @@ ...@@ -9,16 +9,16 @@
"statistics_total_scrobbles_count": "Total scrobbles count: {count}", "statistics_total_scrobbles_count": "Total scrobbles count: {count}",
"statistics_last_scrobble": "Last scrobble: {datetime}", "statistics_last_scrobble": "Last scrobble: {datetime}",
"recent_statistics": "Recent statistics", "recent_statistics": "Recent statistics ({daysCount} days)",
"statistics_selected_period": "On last {daysCount} days:",
"statistics_recent_scrobbles_count_and_discoveries": "{count} scrobbles and {artistsCount} artists / {tracksCount} tracks discovered.", "statistics_recent_scrobbles_count_and_discoveries": "{count} scrobbles and {artistsCount} artists / {tracksCount} tracks discovered.",
"timeline_title": "Recent scrobbles ({daysCount} days)", "timeline_title": "Recent scrobbles ({daysCount} days)",
"counts_by_day": "Counts by day ({daysCount} days)", "counts_by_day": "Counts by day ({daysCount} days)",
"counts_by_hour": "Counts by hour ({daysCount} days)", "counts_by_hour": "Counts by hour ({daysCount} days)",
"discoveries_artists_title": "Artists discoveries ({daysCount} days)", "discoveries_title": "Discoveries ({daysCount} days)",
"discoveries_tracks_title": "Tracks discoveries ({daysCount} days)", "discoveries_artists_title": "Artists",
"discoveries_tracks_title": "Tracks",
"top_artists_title": "Top artists ({daysCount} days)", "top_artists_title": "Top artists ({daysCount} days)",
......
...@@ -9,16 +9,16 @@ ...@@ -9,16 +9,16 @@
"statistics_total_scrobbles_count": "Nombre total d'écoutes : {count}", "statistics_total_scrobbles_count": "Nombre total d'écoutes : {count}",
"statistics_last_scrobble": "Dernière écoute : {datetime}", "statistics_last_scrobble": "Dernière écoute : {datetime}",
"recent_statistics": "Statistiques récentes", "recent_statistics": "Statistiques récentes ({daysCount} jours)",
"statistics_selected_period": "Sur les {daysCount} derniers jours :",
"statistics_recent_scrobbles_count_and_discoveries": "{count} écoutes et {artistsCount} artistes / {tracksCount} morceaux découverts.", "statistics_recent_scrobbles_count_and_discoveries": "{count} écoutes et {artistsCount} artistes / {tracksCount} morceaux découverts.",
"timeline_title": "Écoutes récentes ({daysCount} jours)", "timeline_title": "Écoutes récentes ({daysCount} jours)",
"counts_by_day": "Écoutes par jour ({daysCount} jours)", "counts_by_day": "Écoutes par jour ({daysCount} jours)",
"counts_by_hour": "Écoutes par heure ({daysCount} jours)", "counts_by_hour": "Écoutes par heure ({daysCount} jours)",
"discoveries_artists_title": "Artistes découverts ({daysCount} jours)", "discoveries_title": "Découvertes ({daysCount} jours)",
"discoveries_tracks_title": "Morceaux découverts ({daysCount} jours)", "discoveries_artists_title": "Artistes",
"discoveries_tracks_title": "Morceaux",
"top_artists_title": "Top artistes ({daysCount} jours)", "top_artists_title": "Top artistes ({daysCount} jours)",
......
Clean/improve/refactor code.
Nettoyage/améliorations/refactorisations de code.
...@@ -6,9 +6,8 @@ import 'package:hive/hive.dart'; ...@@ -6,9 +6,8 @@ import 'package:hive/hive.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'config/theme.dart'; import 'package:scrobbles/config/theme.dart';
import 'package:scrobbles/ui/skeleton.dart';
import 'ui/screens/skeleton_screen.dart';
void main() async { void main() async {
/// Initialize packages /// Initialize packages
......
...@@ -7,11 +7,11 @@ class CountsByDayData { ...@@ -7,11 +7,11 @@ class CountsByDayData {
required this.data, required this.data,
}); });
factory CountsByDayData.fromJson(Map<String, dynamic> json) { factory CountsByDayData.fromJson(Map<String, dynamic>? json) {
Map<int, double> data = {}; Map<int, double> data = {};
if (json['counts-by-day'] != null) { if (json?['counts-by-day'] != null) {
json['counts-by-day'].keys.forEach((day) { json?['counts-by-day'].keys.forEach((day) {
data[int.parse(day)] = double.parse(json['counts-by-day'][day].toString()); data[int.parse(day)] = double.parse(json['counts-by-day'][day].toString());
}); });
} }
...@@ -20,7 +20,7 @@ class CountsByDayData { ...@@ -20,7 +20,7 @@ class CountsByDayData {
} }
factory CountsByDayData.createEmpty() { factory CountsByDayData.createEmpty() {
return CountsByDayData.fromJson({}); return CountsByDayData.fromJson({'counts-by-day': {}});
} }
String toString() { String toString() {
......
...@@ -7,11 +7,11 @@ class CountsByHourData { ...@@ -7,11 +7,11 @@ class CountsByHourData {
required this.data, required this.data,
}); });
factory CountsByHourData.fromJson(Map<String, dynamic> json) { factory CountsByHourData.fromJson(Map<String, dynamic>? json) {
Map<int, double> data = {}; Map<int, double> data = {};
if (json['counts-by-hour'] != null) { if (json?['counts-by-hour'] != null) {
json['counts-by-hour'].keys.forEach((day) { json?['counts-by-hour'].keys.forEach((day) {
if (int.parse(day) != 24) { if (int.parse(day) != 24) {
data[int.parse(day)] = double.parse(json['counts-by-hour'][day].toString()); data[int.parse(day)] = double.parse(json['counts-by-hour'][day].toString());
} }
......
...@@ -6,10 +6,10 @@ class DiscoveriesDataValue { ...@@ -6,10 +6,10 @@ class DiscoveriesDataValue {
const DiscoveriesDataValue({required this.newArtistsCount, required this.newTracksCount}); const DiscoveriesDataValue({required this.newArtistsCount, required this.newTracksCount});
factory DiscoveriesDataValue.fromJson(Map<String, dynamic> json) { factory DiscoveriesDataValue.fromJson(Map<String, dynamic>? json) {
return DiscoveriesDataValue( return DiscoveriesDataValue(
newArtistsCount: json['new-artists'] as int, newArtistsCount: json?['new-artists'] as int,
newTracksCount: json['new-tracks'] as int, newTracksCount: json?['new-tracks'] as int,
); );
} }
} }
...@@ -21,10 +21,10 @@ class DiscoveriesData { ...@@ -21,10 +21,10 @@ class DiscoveriesData {
required this.data, required this.data,
}); });
factory DiscoveriesData.fromJson(Map<String, dynamic> json) { factory DiscoveriesData.fromJson(Map<String, dynamic>? json) {
Map<String, DiscoveriesDataValue> data = {}; Map<String, DiscoveriesDataValue> data = {};
json.keys.forEach((date) { json?.keys.forEach((date) {
DiscoveriesDataValue value = DiscoveriesDataValue( DiscoveriesDataValue value = DiscoveriesDataValue(
newArtistsCount: json[date]['new-artists'] as int, newArtistsCount: json[date]['new-artists'] as int,
newTracksCount: json[date]['new-tracks'] as int, newTracksCount: json[date]['new-tracks'] as int,
......
...@@ -9,12 +9,12 @@ class StatisticsGlobalData { ...@@ -9,12 +9,12 @@ class StatisticsGlobalData {
required this.lastScrobble, required this.lastScrobble,
}); });
factory StatisticsGlobalData.fromJson(Map<String, dynamic> json) { factory StatisticsGlobalData.fromJson(Map<String, dynamic>? json) {
return StatisticsGlobalData( return StatisticsGlobalData(
totalCount: json['totalCount'] != null ? json['totalCount'] as int : 0, totalCount: (json?['totalCount'] != null) ? (json?['totalCount'] as int) : 0,
lastScrobble: (json['lastScrobble'] != null && json['lastScrobble']['date'] != null) lastScrobble: (json?['lastScrobble'] != null && json?['lastScrobble']['date'] != null)
? DateTime.parse( ? DateTime.parse(
json['lastScrobble']['date'], json?['lastScrobble']['date'],
) )
: DateTime.now(), : DateTime.now(),
); );
......
...@@ -13,14 +13,16 @@ class StatisticsRecentData { ...@@ -13,14 +13,16 @@ class StatisticsRecentData {
required this.selectedPeriod, required this.selectedPeriod,
}); });
factory StatisticsRecentData.fromJson(Map<String, dynamic> json) { factory StatisticsRecentData.fromJson(Map<String, dynamic>? json) {
return StatisticsRecentData( return StatisticsRecentData(
recentCount: json['recentCount'] != null ? json['recentCount'] as int : 0, recentCount: (json?['recentCount'] != null) ? (json?['recentCount'] as int) : 0,
firstPlayedArtistsCount: firstPlayedArtistsCount: (json?['firstPlayedArtistsCount'] != null)
json['firstPlayedArtistsCount'] != null ? json['firstPlayedArtistsCount'] as int : 0, ? (json?['firstPlayedArtistsCount'] as int)
firstPlayedTracksCount: : 0,
json['firstPlayedTracksCount'] != null ? json['firstPlayedTracksCount'] as int : 0, firstPlayedTracksCount: (json?['firstPlayedTracksCount'] != null)
selectedPeriod: json['selectedPeriod'] != null ? json['selectedPeriod'] as int : 0, ? (json?['firstPlayedTracksCount'] as int)
: 0,
selectedPeriod: (json?['selectedPeriod'] != null) ? (json?['selectedPeriod'] as int) : 0,
); );
} }
......
...@@ -6,10 +6,10 @@ class TimelineDataValue { ...@@ -6,10 +6,10 @@ class TimelineDataValue {
const TimelineDataValue({required this.counts, required this.eclecticism}); const TimelineDataValue({required this.counts, required this.eclecticism});
factory TimelineDataValue.fromJson(Map<String, dynamic> json) { factory TimelineDataValue.fromJson(Map<String, dynamic>? json) {
return TimelineDataValue( return TimelineDataValue(
counts: json['counts'] as int, counts: json?['counts'] as int,
eclecticism: json['eclecticism'] as int, eclecticism: json?['eclecticism'] as int,
); );
} }
} }
...@@ -21,10 +21,10 @@ class TimelineData { ...@@ -21,10 +21,10 @@ class TimelineData {
required this.data, required this.data,
}); });
factory TimelineData.fromJson(Map<String, dynamic> json) { factory TimelineData.fromJson(Map<String, dynamic>? json) {
Map<String, TimelineDataValue> data = {}; Map<String, TimelineDataValue> data = {};
json.keys.forEach((date) { json?.keys.forEach((date) {
TimelineDataValue value = TimelineDataValue( TimelineDataValue value = TimelineDataValue(
counts: json[date]['counts'] as int, counts: json[date]['counts'] as int,
eclecticism: json[date]['eclecticism'] as int, eclecticism: json[date]['eclecticism'] as int,
......
...@@ -6,10 +6,10 @@ class TopArtistsDataValue { ...@@ -6,10 +6,10 @@ class TopArtistsDataValue {
const TopArtistsDataValue({required this.artistName, required this.count}); const TopArtistsDataValue({required this.artistName, required this.count});
factory TopArtistsDataValue.fromJson(Map<String, dynamic> json) { factory TopArtistsDataValue.fromJson(Map<String, dynamic>? json) {
return TopArtistsDataValue( return TopArtistsDataValue(
artistName: json['artistName'] as String, artistName: json?['artistName'] as String,
count: json['count'] as int, count: json?['count'] as int,
); );
} }
} }
...@@ -21,10 +21,10 @@ class TopArtistsData { ...@@ -21,10 +21,10 @@ class TopArtistsData {
required this.topArtists, required this.topArtists,
}); });
factory TopArtistsData.fromJson(Map<String, dynamic> json) { factory TopArtistsData.fromJson(Map<String, dynamic>? json) {
List<TopArtistsDataValue> topArtists = []; List<TopArtistsDataValue> topArtists = [];
json['top-artists'].forEach((element) { json?['top-artists'].forEach((element) {
TopArtistsDataValue value = TopArtistsDataValue( TopArtistsDataValue value = TopArtistsDataValue(
artistName: element['artistName'] as String, artistName: element['artistName'] as String,
count: element['count'] as int, count: element['count'] as int,
......
import 'dart:convert'; import 'dart:convert';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import '../models/counts_by_day.dart'; import 'package:scrobbles/models/counts_by_day.dart';
import '../models/counts_by_hour.dart'; import 'package:scrobbles/models/counts_by_hour.dart';
import '../models/discoveries.dart'; import 'package:scrobbles/models/discoveries.dart';
import '../models/statistics_global.dart'; import 'package:scrobbles/models/statistics_global.dart';
import '../models/statistics_recent.dart'; import 'package:scrobbles/models/statistics_recent.dart';
import '../models/timeline.dart'; import 'package:scrobbles/models/timeline.dart';
import '../models/topartists.dart'; import 'package:scrobbles/models/topartists.dart';
class ScrobblesApi { class ScrobblesApi {
static String baseUrl = 'https://scrobble.harrault.fr'; static String baseUrl = 'https://scrobble.harrault.fr';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../widgets/main_screen/discoveries_card.dart'; import 'package:scrobbles/ui/widgets/cards/discoveries.dart';
class DiscoveriesScreen extends StatefulWidget { class ScreenDiscoveries extends StatefulWidget {
const DiscoveriesScreen({super.key}); const ScreenDiscoveries({super.key});
@override @override
State<DiscoveriesScreen> createState() => _DiscoveriesScreenState(); State<ScreenDiscoveries> createState() => _ScreenDiscoveriesState();
} }
class _DiscoveriesScreenState extends State<DiscoveriesScreen> { class _ScreenDiscoveriesState extends State<ScreenDiscoveries> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
...@@ -19,7 +19,7 @@ class _DiscoveriesScreenState extends State<DiscoveriesScreen> { ...@@ -19,7 +19,7 @@ class _DiscoveriesScreenState extends State<DiscoveriesScreen> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: <Widget>[ children: <Widget>[
const SizedBox(height: 8), const SizedBox(height: 8),
const ChartDiscoveriesCard(), const CardDiscoveries(),
const SizedBox(height: 36), const SizedBox(height: 36),
], ],
), ),
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../widgets/main_screen/statistics_global_card.dart'; import 'package:scrobbles/ui/widgets/cards/statistics_global.dart';
import '../widgets/main_screen/statistics_recent_card.dart'; import 'package:scrobbles/ui/widgets/cards/statistics_recent.dart';
import '../widgets/main_screen/timeline_card.dart'; import 'package:scrobbles/ui/widgets/cards/timeline.dart';
import '../widgets/main_screen/topartists_card.dart'; import 'package:scrobbles/ui/widgets/cards/top_artists.dart';
class HomeScreen extends StatefulWidget { class ScreenHome extends StatefulWidget {
const HomeScreen({super.key}); const ScreenHome({super.key});
@override @override
State<HomeScreen> createState() => _HomeScreenState(); State<ScreenHome> createState() => _ScreenHomeState();
} }
class _HomeScreenState extends State<HomeScreen> { class _ScreenHomeState extends State<ScreenHome> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
...@@ -22,13 +22,13 @@ class _HomeScreenState extends State<HomeScreen> { ...@@ -22,13 +22,13 @@ class _HomeScreenState extends State<HomeScreen> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: <Widget>[ children: <Widget>[
const SizedBox(height: 8), const SizedBox(height: 8),
const StatisticsGlobalCard(), const CardStatisticsGlobal(),
const SizedBox(height: 6), const SizedBox(height: 6),
const StatisticsRecentCard(), const CardStatisticsRecent(),
const SizedBox(height: 6), const SizedBox(height: 6),
const ChartTimelineCard(), const CardTimeline(),
const SizedBox(height: 6), const SizedBox(height: 6),
const ChartTopArtistsCard(), const CardTopArtists(),
const SizedBox(height: 36), const SizedBox(height: 36),
], ],
), ),
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../widgets/main_screen/counts_by_day_card.dart'; import 'package:scrobbles/ui/widgets/cards/counts_by_day.dart';
import '../widgets/main_screen/counts_by_hour_card.dart'; import 'package:scrobbles/ui/widgets/cards/counts_by_hour.dart';
class StatisticsScreen extends StatefulWidget { class ScreenStatistics extends StatefulWidget {
const StatisticsScreen({super.key}); const ScreenStatistics({super.key});
@override @override
State<StatisticsScreen> createState() => _StatisticsScreenState(); State<ScreenStatistics> createState() => _ScreenStatisticsState();
} }
class _StatisticsScreenState extends State<StatisticsScreen> { class _ScreenStatisticsState extends State<ScreenStatistics> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Material( return Material(
...@@ -20,9 +20,9 @@ class _StatisticsScreenState extends State<StatisticsScreen> { ...@@ -20,9 +20,9 @@ class _StatisticsScreenState extends State<StatisticsScreen> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: <Widget>[ children: <Widget>[
const SizedBox(height: 8), const SizedBox(height: 8),
const ChartCountsByDayCard(), const CardCountsByDay(),
const SizedBox(height: 6), const SizedBox(height: 6),
const ChartCountsByHourCard(), const CardCountsByHour(),
const SizedBox(height: 36), const SizedBox(height: 36),
], ],
), ),
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import '../../cubit/bottom_nav_cubit.dart'; import 'package:scrobbles/cubit/bottom_nav_cubit.dart';
import '../widgets/app_bar.dart'; import 'package:scrobbles/ui/screens/discoveries.dart';
import '../widgets/bottom_nav_bar.dart'; import 'package:scrobbles/ui/screens/home.dart';
import 'package:scrobbles/ui/screens/statistics.dart';
import 'discoveries_screen.dart'; import 'package:scrobbles/ui/widgets/app_bar.dart';
import 'home_screen.dart'; import 'package:scrobbles/ui/widgets/bottom_nav_bar.dart';
import 'statistics_screen.dart';
class SkeletonScreen extends StatefulWidget { class SkeletonScreen extends StatefulWidget {
const SkeletonScreen({super.key}); const SkeletonScreen({super.key});
...@@ -20,9 +19,9 @@ class _SkeletonScreenState extends State<SkeletonScreen> { ...@@ -20,9 +19,9 @@ class _SkeletonScreenState extends State<SkeletonScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
const List<Widget> pageNavigation = <Widget>[ const List<Widget> pageNavigation = <Widget>[
const HomeScreen(), const ScreenHome(),
const DiscoveriesScreen(), const ScreenDiscoveries(),
const StatisticsScreen(), const ScreenStatistics(),
]; ];
return BlocProvider<BottomNavCubit>( return BlocProvider<BottomNavCubit>(
......
...@@ -2,12 +2,13 @@ import 'package:easy_localization/easy_localization.dart'; ...@@ -2,12 +2,13 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../config/app_colors.dart'; import 'package:scrobbles/config/app_colors.dart';
import '../../../utils/color_extensions.dart'; import 'package:scrobbles/utils/color_extensions.dart';
class CustomBarChart extends StatelessWidget { class CustomBarChart extends StatelessWidget {
CustomBarChart({super.key}); CustomBarChart({super.key});
final Widget placeholder = Text('⏳');
final double chartHeight = 150.0; final double chartHeight = 150.0;
final double verticalTicksInterval = 10; final double verticalTicksInterval = 10;
final String verticalAxisTitleSuffix = ''; final String verticalAxisTitleSuffix = '';
......
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../config/app_colors.dart'; import 'package:scrobbles/config/app_colors.dart';
class CustomLineChart extends StatelessWidget { class CustomLineChart extends StatelessWidget {
CustomLineChart({super.key}); CustomLineChart({super.key});
final Widget placeholder = Text('⏳');
final double chartHeight = 150.0; final double chartHeight = 150.0;
final double titleFontSize = 10; final double titleFontSize = 10;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment