diff options
Diffstat (limited to 'Emby.Server.Implementations/Social/SharingRepository.cs')
| -rw-r--r-- | Emby.Server.Implementations/Social/SharingRepository.cs | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/Social/SharingRepository.cs b/Emby.Server.Implementations/Social/SharingRepository.cs new file mode 100644 index 000000000..e09b7f5b9 --- /dev/null +++ b/Emby.Server.Implementations/Social/SharingRepository.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Emby.Server.Implementations.Data; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Social; +using SQLitePCL.pretty; + +namespace Emby.Server.Implementations.Social +{ + public class SharingRepository : BaseSqliteRepository, ISharingRepository + { + public SharingRepository(ILogger logger, IApplicationPaths appPaths) + : base(logger) + { + DbFilePath = Path.Combine(appPaths.DataPath, "shares.db"); + } + + /// <summary> + /// Opens the connection to the database + /// </summary> + /// <returns>Task.</returns> + public void Initialize() + { + using (var connection = CreateConnection()) + { + string[] queries = { + + "create table if not exists Shares (Id GUID, ItemId TEXT, UserId TEXT, ExpirationDate DateTime, PRIMARY KEY (Id))", + "create index if not exists idx_Shares on Shares(Id)", + + "pragma shrink_memory" + }; + + connection.RunQueries(queries); + } + } + + public async Task CreateShare(SocialShareInfo info) + { + if (info == null) + { + throw new ArgumentNullException("info"); + } + if (string.IsNullOrWhiteSpace(info.Id)) + { + throw new ArgumentNullException("info.Id"); + } + + lock (WriteLock) + { + using (var connection = CreateConnection()) + { + connection.RunInTransaction(db => + { + var commandText = "replace into Shares (Id, ItemId, UserId, ExpirationDate) values (?, ?, ?, ?)"; + + db.Execute(commandText, + info.Id.ToGuidParamValue(), + info.ItemId, + info.UserId, + info.ExpirationDate.ToDateTimeParamValue()); + }); + } + } + } + + public SocialShareInfo GetShareInfo(string id) + { + if (string.IsNullOrWhiteSpace(id)) + { + throw new ArgumentNullException("id"); + } + + lock (WriteLock) + { + using (var connection = CreateConnection(true)) + { + var commandText = "select Id, ItemId, UserId, ExpirationDate from Shares where id = ?"; + + var paramList = new List<object>(); + paramList.Add(id.ToGuidParamValue()); + + foreach (var row in connection.Query(commandText, paramList.ToArray())) + { + return GetSocialShareInfo(row); + } + } + } + + return null; + } + + private SocialShareInfo GetSocialShareInfo(IReadOnlyList<IResultSetValue> reader) + { + var info = new SocialShareInfo(); + + info.Id = reader[0].ReadGuid().ToString("N"); + info.ItemId = reader[1].ToString(); + info.UserId = reader[2].ToString(); + info.ExpirationDate = reader[3].ReadDateTime(); + + return info; + } + + public async Task DeleteShare(string id) + { + + } + } +} |
