ajout son dans partition (peut lancer / pause / arreter et s'arrete quand on retour arriere) + truc du prof pour charger et stokcer sur le tel

code
Vivien DUFOUR 2 years ago
parent 3005fd83b0
commit 279abcc6bf

@ -5,10 +5,13 @@ namespace MusiLib;
public partial class App : Application public partial class App : Application
{ {
public Manager MyManager { get; private set; } = new Manager(); public Manager MyManager { get; private set; } = new Manager(new Stub.Stub());
public App() public App()
{ {
/*MyManager.chargerDonnees();*/ MyManager.chargeDonnees();
MyManager.Persistance = new DataContractPersistance.DataContractPers();
MyManager.sauvegardeDonnees();
InitializeComponent(); InitializeComponent();

@ -0,0 +1,72 @@
using Android;
using AndroidX.Core.App;
using AndroidX.Core.Content;
using Android.OS;
using Java.Security;
using MusiLib.Model;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using Android.Content.PM;
using Android.App;
namespace MusiLib.DataContractPersistance
{
public class DataContractPers : IPersistanceManager
{
private static readonly int requestCode = 100;
public string FilePath { get; set; } = Path.Combine(Android.OS.Environment.DataDirectory.AbsolutePath, "fr.vivienmaxime.musilib");
public string FileNameP { get; set; } = "UserFavoris.xml";
public string FileNameU { get; set; } = "UserData.xml";
public (List<Partition>, List<Utilisateur>) chargeDonnees()
{
var serializerU = new DataContractSerializer(typeof(Utilisateur));
List<Utilisateur> util = new List<Utilisateur>();
using (Stream stream = File.OpenRead(Path.Combine(FilePath, FileNameU)))
{
util = serializerU.ReadObject(stream) as List<Utilisateur>;
}
return (new List<Partition>(), util);
}
public void sauvegardeDonnees(List<Partition> p, List<Utilisateur> u)
{
// Vérifiez si l'application a l'autorisation de lire/écrire des fichiers
if (ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.ReadExternalStorage) == Android.Content.PM.Permission.Denied ||
ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.WriteExternalStorage) == Android.Content.PM.Permission.Denied)
{
// Demandez à l'utilisateur la permission d'accéder aux fichiers
ActivityCompat.RequestPermissions((Android.App.Activity)Android.App.Application.Context,
new string[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage },
requestCode);
}
var serializerU = new DataContractSerializer(typeof(Utilisateur));
if (!Directory.Exists(FilePath))
{
System.Diagnostics.Debug.WriteLine("Directory créé à l'instant");
System.Diagnostics.Debug.WriteLine(Directory.GetDirectoryRoot);
System.Diagnostics.Debug.WriteLine(FilePath);
Directory.CreateDirectory(FilePath);
}
else
{
using (Stream stream = File.Create(Path.Combine(FilePath, FileNameU)))
{
serializerU.WriteObject(stream, u);
}
}
}
}
}

@ -17,9 +17,8 @@ public static class MauiProgram
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
}); });
builder.Services.AddSingleton(AudioManager.Current); builder.Services.AddSingleton(AudioManager.Current);
builder.Services.AddTransient<Accueil>();
return builder.Build(); return builder.Build();
} }
} }

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace MusiLib.Model namespace MusiLib.Model
{ {
public interface IPersistenceManager public interface IPersistanceManager
{ {
(List<Partition>, List<Utilisateur>) chargeDonnees(); (List<Partition>, List<Utilisateur>) chargeDonnees();

@ -10,14 +10,23 @@ namespace MusiLib.Model
{ {
public class Manager public class Manager
{ {
public IPersistanceManager Persistance { get; set; }
public List<Utilisateur> utilisateurs { get; private set; } public List<Utilisateur> utilisateurs { get; private set; }
public List<Partition> partitions { get; private set; } public List<Partition> partitions { get; private set; }
public Manager() { public Manager()
{
utilisateurs = new List<Utilisateur>(); utilisateurs = new List<Utilisateur>();
partitions = new List<Partition>(); partitions = new List<Partition>();
} }
public Manager(IPersistanceManager persistance)
{
Persistance = persistance;
utilisateurs = new List<Utilisateur>();
partitions = new List<Partition>();
}
public void ajouterUtilisateur(Utilisateur utilisateur) public void ajouterUtilisateur(Utilisateur utilisateur)
{ {
utilisateurs.Add(utilisateur); utilisateurs.Add(utilisateur);
@ -28,39 +37,22 @@ namespace MusiLib.Model
partitions.Add(partition); partitions.Add(partition);
} }
public void chargeDonnees()
/*public class Manager
{ {
var donnees = Persistance.chargeDonnees();
public IPersistenceManager Persistence { get; set; } utilisateurs.AddRange(donnees.Item2);
partitions.AddRange(donnees.Item1);
public Manager(IPersistenceManager manager)
{
utilisateurs = new ReadOnlyCollection<>
public List<Partition> partitions { get; private set; }
} }
public Manager() public void sauvegardeDonnees()
{ {
utilisateurs = new List<Utilisateur>(); Persistance.sauvegardeDonnees(partitions, utilisateurs);
partitions = new List<Partition>();
} }
public void ajouterUtilisateur(Utilisateur utilisateur)
{
utilisateurs.Add(utilisateur);
}
public void ajouterPartition(Partition partition)
{
partitions.Add(partition);
}
private void chargeDonnees()
{
var donnees = Persistence chargeDonnees();
}*/
} }
} }

@ -3,4 +3,8 @@
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application> <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest> </manifest>

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace MusiLib.Stub namespace MusiLib.Stub
{ {
public class Stub : IPersistenceManager public class Stub : IPersistanceManager
{ {
public (List<Partition>, List<Utilisateur>) chargeDonnees() public (List<Partition>, List<Utilisateur>) chargeDonnees()
{ {

@ -85,12 +85,6 @@
BackgroundColor="Blue" BackgroundColor="Blue"
Clicked="GoToPartitionButton"/> Clicked="GoToPartitionButton"/>
<Button Grid.Row="1" Grid.Column="2"
Text="Musique"
WidthRequest="75"
HeightRequest="75"
BackgroundColor="Blue"
Clicked="Button_Clicked"/>
</Grid> </Grid>
</ScrollView> </ScrollView>

@ -5,13 +5,10 @@ namespace MusiLib.Views;
public partial class Accueil : ContentPage, IAllowClick public partial class Accueil : ContentPage, IAllowClick
{ {
private readonly IAudioManager audioManager;
public Accueil(IAudioManager audioManager) public Accueil()
{ {
InitializeComponent(); InitializeComponent();
this.audioManager = audioManager;
} }
private void GoToFavorisButton(object sender, EventArgs e) private void GoToFavorisButton(object sender, EventArgs e)
@ -34,17 +31,4 @@ public partial class Accueil : ContentPage, IAllowClick
IAllowClick.ResumeTap(); IAllowClick.ResumeTap();
} }
private async void Button_Clicked(object sender, EventArgs e)
{
/*var player = new Windows.Media.Playback.MediaPlayer();
var uri = new Uri($"C:/Users/Utilisateur/Documents/Cours/SAE/SAE_201/ViewsApp/ViewsApp/Resources/Raw/au_clair_de_la_lune.mp3");
player.SetUriSource(uri);
player.Volume = 0.5;
player.Play();*/
var player = audioManager.CreatePlayer(await FileSystem.OpenAppPackageFileAsync("au_clair_de_la_lune.wav"));
player.Volume = 1;
player.Play();
}
} }

@ -0,0 +1,39 @@
using Plugin.Maui.Audio;
namespace MusiLib.Views
{
public interface IPlayMusic
{
static AudioPlayer player;
static bool isMusicPlaying = false;
static bool isMusicBeginning = false;
public static async void beginMusic()
{
player = (AudioPlayer)AudioManager.Current.CreatePlayer(await FileSystem.OpenAppPackageFileAsync("au_clair_de_la_lune.wav"));
player.Play();
isMusicPlaying = true;
isMusicBeginning = true;
}
public static void playMusic()
{
player.Play();
isMusicPlaying = true;
}
public static void pauseMusic()
{
player.Pause();
isMusicPlaying = false;
}
public static void stopMusic()
{
player.Stop();
isMusicPlaying = false;
isMusicBeginning = false;
}
}
}

@ -55,15 +55,23 @@
HorizontalOptions="Start" HorizontalOptions="Start"
/> />
<Button Grid.Row="5" Grid.Column="0" <Button Grid.Row="5" Grid.Column="0"
Text="E" Text="Jouer"
WidthRequest="75" WidthRequest="75"
HeightRequest="75" HeightRequest="75"
HorizontalOptions="Start" HorizontalOptions="Start"
Clicked="Play_Music"
/> />
<Button Grid.Row="5" Grid.Column="1"
Text="Arrêter"
WidthRequest="75"
HeightRequest="75"
HorizontalOptions="Start"
Clicked="Stop_Music"
/>
</Grid> </Grid>
</VerticalStackLayout> </VerticalStackLayout>
</HorizontalStackLayout> </HorizontalStackLayout>
<Button Text="Musique" Clicked="Button_Clicked"/>
</VerticalStackLayout> </VerticalStackLayout>
</ScrollView> </ScrollView>
</ContentPage> </ContentPage>

@ -1,6 +1,5 @@
using Microsoft.Maui.Controls.PlatformConfiguration; using Microsoft.Maui.Controls.PlatformConfiguration;
using MusiLib.Model; using MusiLib.Model;
using Plugin.Maui.Audio;
namespace MusiLib.Views; namespace MusiLib.Views;
@ -8,33 +7,44 @@ namespace MusiLib.Views;
public partial class Partition : ContentPage public partial class Partition : ContentPage
{ {
/*private readonly IAudioManager audioManager;*/ public Manager MyManager => (App.Current as App).MyManager;
public Manager MyManager => (App.Current as App).MyManager;
public Partition() public Partition()
{ {
InitializeComponent(); InitializeComponent();
listUtil.BindingContext = MyManager;
/*this.audioManager = audioManager;*/
} }
private void Play_Music(object sender, EventArgs e)
private async void Button_Clicked(object sender, EventArgs e)
{ {
/*var player = new Windows.Media.Playback.MediaPlayer(); Button button = (Button)sender;
var uri = new Uri($"C:/Users/Utilisateur/Documents/Cours/SAE/SAE_201/ViewsApp/ViewsApp/Resources/Raw/au_clair_de_la_lune.mp3"); if (!IPlayMusic.isMusicBeginning)
player.SetUriSource(uri); {
player.Volume = 0.5; IPlayMusic.beginMusic();
player.Play();*/ button.Text = "Pause";
}
/*var player = audioManager.CreatePlayer(await FileSystem.OpenAppPackageFileAsync("au_clair_de_la_lune.wav")); else if(!IPlayMusic.isMusicPlaying)
player.Play(); {
player.Dispose();*/ IPlayMusic.playMusic();
button.Text = "Pause";
}
else
{
IPlayMusic.pauseMusic();
button.Text = "Jouer";
}
}
private void Stop_Music(object sender, EventArgs e)
{
IPlayMusic.stopMusic();
}
protected override bool OnBackButtonPressed()
{
IPlayMusic.stopMusic();
return base.OnBackButtonPressed();
} }
} }
Loading…
Cancel
Save