コード例 #1
0
        private static void CreateInitialUsers()
        {
            JMMUserRepository repUsers = new JMMUserRepository();

            if (repUsers.GetAll().Count() > 0)
            {
                return;
            }

            JMMUser defaultUser = new JMMUser();

            defaultUser.CanEditServerSettings = 1;
            defaultUser.HideCategories        = "";
            defaultUser.IsAdmin     = 1;
            defaultUser.IsAniDBUser = 1;
            defaultUser.IsTraktUser = 1;
            defaultUser.Password    = "";
            defaultUser.Username    = "******";
            repUsers.Save(defaultUser);

            JMMUser familyUser = new JMMUser();

            familyUser.CanEditServerSettings = 1;
            familyUser.HideCategories        = "Ecchi,Nudity,Sex,Sexual Abuse,Horror,Erotic Game,Incest,18 Restricted";
            familyUser.IsAdmin     = 1;
            familyUser.IsAniDBUser = 1;
            familyUser.IsTraktUser = 1;
            familyUser.Password    = "";
            familyUser.Username    = "******";
            repUsers.Save(familyUser);
        }
コード例 #2
0
ファイル: PlexWebhook.cs プロジェクト: DoubleX69/ShokoServer
        public ActionResult SyncForUser(int uid)
        {
            JMMUser user = HttpContext.GetUser();

            ShokoServer.Instance.SyncPlex();
            return(APIStatus.OK());
        }
コード例 #3
0
 public static void Init()
 {
     JMMUser.Populate(a => a.JMMUserID);
     CloudAccount.Populate(a => a.CloudID);
     ImportFolder.Populate(a => a.ImportFolderID);
     AniDB_Anime.Populate(a => a.AniDB_AnimeID);
     AniDB_Episode.Populate(a => a.AniDB_EpisodeID);
     AniDB_File.Populate(a => a.AniDB_FileID);
     AniDB_Anime_Title.Populate(a => a.AniDB_Anime_TitleID);
     AniDB_Anime_Tag.Populate(a => a.AniDB_Anime_TagID);
     AniDB_Tag.Populate(a => a.AniDB_TagID);
     CustomTag.Populate(a => a.CustomTagID);
     CrossRef_CustomTag.Populate(a => a.CrossRef_CustomTagID);
     CrossRef_File_Episode.Populate(a => a.CrossRef_File_EpisodeID);
     VideoLocalPlace.Populate(a => a.VideoLocal_Place_ID);
     VideoLocal.Populate(a => a.VideoLocalID);
     VideoLocalUser.Populate(a => a.VideoLocal_UserID);
     GroupFilter.Populate(a => a.GroupFilterID);
     AnimeEpisode.Populate(a => a.AnimeEpisodeID);
     AnimeEpisode_User.Populate(a => a.AnimeEpisode_UserID);
     AnimeSeries.Populate(a => a.AnimeSeriesID);
     AnimeSeries_User.Populate(a => a.AnimeSeries_UserID);
     AnimeGroup.Populate(a => a.AnimeGroupID);
     AnimeGroup_User.Populate(a => a.AnimeGroup_UserID);
     GroupFilter.PostProcess();
     CleanUpMemory();
 }
コード例 #4
0
        public System.IO.Stream GetMetadata(string UserId, string TypeId, string Id)
        {
            try
            {
                int type;
                int.TryParse(TypeId, out type);
                JMMUser user = KodiHelper.GetUser(UserId);
                switch ((JMMType)type)
                {
                case JMMType.Group:
                    return(GetItemsFromGroup(user.JMMUserID, Id));

                case JMMType.GroupFilter:
                    return(GetGroupsFromFilter(user.JMMUserID, Id));

                case JMMType.GroupUnsort:
                    return(GetUnsort(user.JMMUserID));

                case JMMType.Serie:
                    return(GetItemsFromSerie(user.JMMUserID, Id));

                case JMMType.File:
                    return(InternalGetFile(user.JMMUserID, Id));
                }
                return(new MemoryStream());
            }
            catch (Exception ex)
            {
                logger.ErrorException(ex.ToString(), ex);
                return(new MemoryStream());
            }
        }
コード例 #5
0
        /// <summary>
        /// Create user from Contract_JMMUser
        /// </summary>
        /// <returns></returns>
        private object CreateUser()
        {
            Request     request = this.Request;
            SVR_JMMUser _user   = (SVR_JMMUser)this.Context.CurrentUser;

            if (_user.IsAdmin == 1)
            {
                JMMUser user = this.Bind();
                user.Password       = Digest.Hash(user.Password);
                user.HideCategories = "";
                user.PlexUsers      = "";
                if (new ShokoServiceImplementation().SaveUser(user) == "")
                {
                    return(APIStatus.statusOK());
                }
                else
                {
                    return(APIStatus.internalError());
                }
            }
            else
            {
                return(APIStatus.adminNeeded());
            }
        }
コード例 #6
0
        private static void CreateInitialUsers()
        {
            JMMUserRepository repUsers = new JMMUserRepository();

            if (repUsers.GetAll().Count() > 0)
            {
                return;
            }

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture);

            JMMUser defaultUser = new JMMUser();

            defaultUser.CanEditServerSettings = 1;
            defaultUser.HideCategories        = "";
            defaultUser.IsAdmin     = 1;
            defaultUser.IsAniDBUser = 1;
            defaultUser.IsTraktUser = 1;
            defaultUser.Password    = "";
            defaultUser.Username    = JMMServer.Properties.Resources.Users_Default;
            repUsers.Save(defaultUser, true);

            JMMUser familyUser = new JMMUser();

            familyUser.CanEditServerSettings = 1;
            familyUser.HideCategories        = "ecchi,nudity,sex,sexual abuse,horror,erotic game,incest,18 restricted";
            familyUser.IsAdmin     = 1;
            familyUser.IsAniDBUser = 1;
            familyUser.IsTraktUser = 1;
            familyUser.Password    = "";
            familyUser.Username    = JMMServer.Properties.Resources.Users_FamilyFriendly;
            repUsers.Save(familyUser, true);
        }
コード例 #7
0
        public ActionResult SyncForUser(int uid)
        {
            JMMUser user = Repo.Instance.JMMUser.GetByID(uid);

            ShokoServer.Instance.SyncPlex();
            return(APIStatus.OK());
        }
コード例 #8
0
        public static void Init()
        {
            JMMUser.Populate();
            CloudAccount.Populate();
            ImportFolder.Populate();
            AniDB_Anime.Populate();
            AniDB_Episode.Populate();
            AniDB_File.Populate();
            AniDB_Anime_Title.Populate();
            AniDB_Anime_Tag.Populate();
            AniDB_Tag.Populate();
            CustomTag.Populate();
            CrossRef_CustomTag.Populate();
            CrossRef_File_Episode.Populate();
            VideoLocalPlace.Populate();
            VideoLocal.Populate();
            VideoLocalUser.Populate();
            GroupFilter.Populate();
            AnimeEpisode.Populate();
            AnimeEpisode_User.Populate();
            AnimeSeries.Populate();
            AnimeSeries_User.Populate();
            AnimeGroup.Populate();
            AnimeGroup_User.Populate();

            // Update Contracts if necessary
            try
            {
                JMMUser.RegenerateDb();
                CloudAccount.RegenerateDb();
                ImportFolder.RegenerateDb();
                AniDB_Anime.RegenerateDb();
                AniDB_Episode.RegenerateDb();
                AniDB_File.RegenerateDb();
                AniDB_Anime_Title.RegenerateDb();
                AniDB_Anime_Tag.RegenerateDb();
                AniDB_Tag.RegenerateDb();
                CustomTag.RegenerateDb();
                CrossRef_CustomTag.RegenerateDb();
                CrossRef_File_Episode.RegenerateDb();
                VideoLocalPlace.RegenerateDb();
                VideoLocal.RegenerateDb();
                VideoLocalUser.RegenerateDb();
                AnimeEpisode.RegenerateDb();
                AnimeEpisode_User.RegenerateDb();
                AnimeSeries.RegenerateDb();
                AnimeSeries_User.RegenerateDb();
                AnimeGroup.RegenerateDb();
                AnimeGroup_User.RegenerateDb();

                GroupFilter.RegenerateDb();
                GroupFilter.PostProcess();
            }
            catch (Exception e)
            {
                LogManager.GetCurrentClassLogger().Error(e, "There was an error starting the Database Factory");
            }
            CleanUpMemory();
        }
コード例 #9
0
ファイル: SVR_JMMUser.cs プロジェクト: grb19/ShokoServer
 public static bool CompareUser(JMMUser olduser, JMMUser newuser)
 {
     if (olduser == null || olduser.HideCategories == newuser.HideCategories)
     {
         return(true);
     }
     return(false);
 }
コード例 #10
0
ファイル: PlexHelper.cs プロジェクト: maxpiva/ShokoServer
 public static PlexHelper GetForUser(JMMUser user)
 {
     if (Cache.TryGetValue(user.JMMUserID, out PlexHelper helper))
     {
         return(helper);
     }
     Cache.Add(user.JMMUserID, helper = new PlexHelper(user));
     return(helper);
 }
コード例 #11
0
 public override bool LoadFromDBCommand(CommandRequest cq)
 {
     CommandID        = cq.CommandID;
     CommandRequestID = cq.CommandRequestID;
     Priority         = cq.Priority;
     CommandDetails   = cq.CommandDetails;
     DateTimeUpdated  = cq.DateTimeUpdated;
     _jmmuser         = RepoFactory.JMMUser.GetByID(Convert.ToInt32(cq.CommandDetails));
     return(true);
 }
コード例 #12
0
ファイル: RepoFactory.cs プロジェクト: gocheap/ShokoServer
        public static void Init()
        {
            JMMUser.Populate();
            CloudAccount.Populate();
            ImportFolder.Populate();
            AniDB_Anime.Populate();
            AniDB_Episode.Populate();
            AniDB_File.Populate();
            AniDB_Anime_Title.Populate();
            AniDB_Anime_Tag.Populate();
            AniDB_Tag.Populate();
            CustomTag.Populate();
            CrossRef_CustomTag.Populate();
            CrossRef_File_Episode.Populate();
            VideoLocalPlace.Populate();
            VideoLocal.Populate();
            VideoLocalUser.Populate();
            GroupFilter.Populate();
            AnimeEpisode.Populate();
            AnimeEpisode_User.Populate();
            AnimeSeries.Populate();
            AnimeSeries_User.Populate();
            AnimeGroup.Populate();
            AnimeGroup_User.Populate();

            // Update Contracts if necessary
            JMMUser.RegenerateDb();
            CloudAccount.RegenerateDb();
            ImportFolder.RegenerateDb();
            AniDB_Anime.RegenerateDb();
            AniDB_Episode.RegenerateDb();
            AniDB_File.RegenerateDb();
            AniDB_Anime_Title.RegenerateDb();
            AniDB_Anime_Tag.RegenerateDb();
            AniDB_Tag.RegenerateDb();
            CustomTag.RegenerateDb();
            CrossRef_CustomTag.RegenerateDb();
            CrossRef_File_Episode.RegenerateDb();
            VideoLocalPlace.RegenerateDb();
            VideoLocal.RegenerateDb();
            VideoLocalUser.RegenerateDb();
            AnimeEpisode.RegenerateDb();
            AnimeEpisode_User.RegenerateDb();
            AnimeSeries.RegenerateDb();
            AnimeSeries_User.RegenerateDb();
            AnimeGroup.RegenerateDb();
            AnimeGroup_User.RegenerateDb();

            GroupFilter.RegenerateDb();
            GroupFilter.PostProcess();
            CleanUpMemory();
        }
コード例 #13
0
 public JMMUser AuthenticateUser(string userName, string password)
 {
     using (var session = JMMService.SessionFactory.OpenSession())
     {
         string  hashedPassword = Digest.Hash(password);
         JMMUser cr             = session
                                  .CreateCriteria(typeof(JMMUser))
                                  .Add(Restrictions.Eq("Username", userName))
                                  .Add(Restrictions.Eq("Password", hashedPassword))
                                  .UniqueResult <JMMUser>();
         return(cr);
     }
 }
コード例 #14
0
 public void Save(JMMUser obj)
 {
     using (var session = JMMService.SessionFactory.OpenSession())
     {
         // populate the database
         using (var transaction = session.BeginTransaction())
         {
             session.SaveOrUpdate(obj);
             transaction.Commit();
         }
     }
     logger.Trace("Updating group filter stats by user from JMMUserRepository.Save: {0}", obj.JMMUserID);
     StatsCache.Instance.UpdateGroupFilterUsingUser(obj.JMMUserID);
 }
コード例 #15
0
        public LinkPlexForm(JMMUser user)
        {
            _user = user;
            InitializeComponent();
            btnClose.Click      += BtnClose_Click;
            btnLink.Click       += BtnLinkOnClick;
            btnInvalidate.Click += BtnInvalidateOnClick;

            _timer = new Timer {
                Interval = 10 * 1000
            };                                      //10 seconds
            _timer.Elapsed += TimerOnElapsed;
            _timer.Start();
        }
コード例 #16
0
 public void Delete(int id)
 {
     using (var session = JMMService.SessionFactory.OpenSession())
     {
         // populate the database
         using (var transaction = session.BeginTransaction())
         {
             JMMUser cr = GetByID(id);
             if (cr != null)
             {
                 session.Delete(cr);
                 transaction.Commit();
             }
         }
     }
 }
コード例 #17
0
        /// <summary>
        /// Create user from Contract_JMMUser
        /// </summary>
        /// <returns></returns>
        private object CreateUser()
        {
            SVR_JMMUser _user = (SVR_JMMUser)Context.CurrentUser;

            if (_user.IsAdmin == 1)
            {
                JMMUser user = this.Bind();
                user.Password       = Digest.Hash(user.Password);
                user.HideCategories = string.Empty;
                user.PlexUsers      = string.Empty;
                return(new ShokoServiceImplementation().SaveUser(user) == string.Empty
                    ? APIStatus.OK()
                    : APIStatus.InternalError());
            }

            return(APIStatus.AdminNeeded());
        }
コード例 #18
0
        public string ValidateUser(string username, string password, string device)
        {
            JMMUser userrecord = RepoFactory.JMMUser.AuthenticateUser(username, password);

            if (userrecord == null)
            {
                return(string.Empty);
            }

            lock (Cache)
            {
                int uid    = userrecord.JMMUserID;
                var tokens = UserIDs
                             .GetMultiple(uid).Where(a => string.IsNullOrEmpty(a.Token) ||
                                                     a.DeviceName.Trim().Equals(device.Trim(),
                                                                                StringComparison.InvariantCultureIgnoreCase))
                             .ToList();
                var auth = tokens.FirstOrDefault(a => !string.IsNullOrEmpty(a.Token) &&
                                                 a.DeviceName.Trim().Equals(device.Trim(),
                                                                            StringComparison.InvariantCultureIgnoreCase));
                if (tokens.Count > 1)
                {
                    if (auth != null)
                    {
                        tokens.Remove(auth);
                    }
                    tokens.ForEach(Delete);
                }
                string apiKey = auth?.Token.ToLowerInvariant().Trim() ?? string.Empty;

                if (!string.IsNullOrEmpty(apiKey))
                {
                    return(apiKey);
                }

                apiKey = Guid.NewGuid().ToString().ToLowerInvariant().Trim();
                AuthTokens newToken =
                    new AuthTokens {
                    UserID = uid, DeviceName = device.Trim().ToLowerInvariant(), Token = apiKey
                };
                Save(newToken);

                return(apiKey);
            }
        }
コード例 #19
0
        public string ValidateUser(string username, string password, string device)
        {
            JMMUser userrecord = Repo.Instance.JMMUser.AuthenticateUser(username, password);

            if (userrecord == null)
            {
                return(string.Empty);
            }

            int uid = userrecord.JMMUserID;
            List <AuthTokens> tokens;

            using (RepoLock.ReaderLock())
            {
                tokens = IsCached
                    ? UserIDs.GetMultiple(uid).Where(a => string.IsNullOrEmpty(a.Token) || a.DeviceName.Trim().Equals(device.Trim(), StringComparison.InvariantCultureIgnoreCase)).ToList()
                    : Table.Where(a => a.UserID == uid && (string.IsNullOrEmpty(a.Token) || a.DeviceName.Trim().Equals(device.Trim(), StringComparison.InvariantCultureIgnoreCase))).ToList();
            }
            AuthTokens auth = tokens.FirstOrDefault(a => !string.IsNullOrEmpty(a.Token) && a.DeviceName.Trim().Equals(device.Trim(), StringComparison.InvariantCultureIgnoreCase));

            if (tokens.Count > 1)
            {
                if (auth != null)
                {
                    tokens.Remove(auth);
                }
                Delete(tokens);
            }
            string apiKey = auth?.Token.ToLowerInvariant().Trim() ?? string.Empty;

            if (!string.IsNullOrEmpty(apiKey))
            {
                return(apiKey);
            }

            apiKey = Guid.NewGuid().ToString().ToLowerInvariant().Trim();
            using (var obj = BeginAdd())
            {
                obj.Entity.UserID     = uid;
                obj.Entity.DeviceName = device.Trim().ToLowerInvariant();
                obj.Entity.Token      = apiKey;
                obj.Commit();
            }
            return(apiKey);
        }
コード例 #20
0
        public PlexWebhookAuthenticated() : base("/plex")
        {
            this.RequiresAuthentication();
            //Get["/pin"] = o => CallPlexHelper(h => h.Authenticate());
            Get["/loginurl"]          = o => CallPlexHelper(h => h.LoginUrl);
            Get["/pin/authenticated"] = o => $"{CallPlexHelper(h => h.IsAuthenticated)}";
            Get["/token/invalidate"]  = o => CallPlexHelper(h =>
            {
                h.InvalidateToken();
                return(true);
            });
            Get["/sync", true] = async(x, ct) => await Task.Factory.StartNew(() =>
            {
                new CommandRequest_PlexSyncWatched((JMMUser)this.Context.CurrentUser).Save();
                return(APIStatus.OK());
            });

            Get["/sync/all", true] = async(x, ct) => await Task.Factory.StartNew(() =>
            {
                if (((JMMUser)this.Context.CurrentUser).IsAdmin != 1)
                {
                    return(APIStatus.AdminNeeded());
                }
                ShokoServer.Instance.SyncPlex();
                return(APIStatus.OK());
            });

            Get["/sync/{id}", true] = async(x, ct) => await Task.Factory.StartNew(() =>
            {
                if (((JMMUser)this.Context.CurrentUser).IsAdmin != 1)
                {
                    return(APIStatus.AdminNeeded());
                }
                JMMUser user = RepoFactory.JMMUser.GetByID(x.id);
                ShokoServer.Instance.SyncPlex();
                return(APIStatus.OK());
            });

#if DEBUG
            Get["/test/dir"]      = o => Response.AsJson(CallPlexHelper(h => h.GetDirectories()));
            Get["/test/lib/{id}"] = o =>
                                    Response.AsJson(CallPlexHelper(h =>
                                                                   ((SVR_Directory)h.GetDirectories().FirstOrDefault(d => d.Key == (int)o.id))?.GetShows()));
#endif
        }
コード例 #21
0
 public void Save(JMMUser obj, bool updateGroupFilters)
 {
     lock (obj)
     {
         bool isNew = false;
         if (obj.JMMUserID == 0)
         {
             isNew = true;
             using (var session = JMMService.SessionFactory.OpenSession())
             {
                 obj.Contract = null;
                 using (var transaction = session.BeginTransaction())
                 {
                     session.SaveOrUpdate(obj);
                     transaction.Commit();
                 }
             }
         }
         GenerateContract(obj);
         if (updateGroupFilters)
         {
             using (var session = JMMService.SessionFactory.OpenSession())
             {
                 JMMUser old = isNew ? null : session.Get <JMMUser>(obj.JMMUserID);
                 updateGroupFilters = JMMUser.CompareUser(old?.Contract, obj.Contract);
             }
         }
         using (var session = JMMService.SessionFactory.OpenSession())
         {
             // populate the database
             using (var transaction = session.BeginTransaction())
             {
                 session.SaveOrUpdate(obj);
                 transaction.Commit();
             }
         }
         Cache.Update(obj);
         if (updateGroupFilters)
         {
             logger.Trace("Updating group filter stats by user from JMMUserRepository.Save: {0}", obj.JMMUserID);
             obj.UpdateGroupFilters();
         }
     }
 }
コード例 #22
0
        public System.IO.Stream GetMetadata(string UserId, string TypeId, string Id, string historyinfo)
        {
            try
            {
                HistoryInfo his = HistoryInfo.FromKey(historyinfo);
                if (WebOperationContext.Current != null)
                {
                    his.Key = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.ToString();
                }
                int type;
                int.TryParse(TypeId, out type);
                JMMUser user = PlexHelper.GetJMMUser(UserId);
                switch ((JMMType)type)
                {
                case JMMType.Group:
                    return(GetItemsFromGroup(user.JMMUserID, Id, his));

                case JMMType.GroupFilter:
                    return(GetGroupsFromFilter(user.JMMUserID, Id, his));

                case JMMType.GroupUnsort:
                    return(GetUnsort(user.JMMUserID, his));

                case JMMType.Serie:
                    return(GetItemsFromSerie(user.JMMUserID, Id, his));

                case JMMType.File:
                    return(InternalGetFile(user.JMMUserID, Id, his));

                case JMMType.Playlist:
                    return(GetItemsFromPlaylist(user.JMMUserID, Id, his));
                }
                return(new MemoryStream());
            }
            catch (Exception ex)
            {
                logger.ErrorException(ex.ToString(), ex);
                return(new MemoryStream());
            }
        }
コード例 #23
0
        public static void GenerateContract(JMMUser user)
        {
            Contract_JMMUser contract = new Contract_JMMUser();

            contract.JMMUserID   = user.JMMUserID;
            contract.Username    = user.Username;
            contract.Password    = user.Password;
            contract.IsAdmin     = user.IsAdmin;
            contract.IsAniDBUser = user.IsAniDBUser;
            contract.IsTraktUser = user.IsTraktUser;
            if (!string.IsNullOrEmpty(user.HideCategories))
            {
                contract.HideCategories =
                    new HashSet <string>(
                        user.HideCategories.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                        .Select(a => a.Trim())
                        .Where(a => !string.IsNullOrEmpty(a)).Distinct(StringComparer.InvariantCultureIgnoreCase),
                        StringComparer.InvariantCultureIgnoreCase);
            }
            else
            {
                contract.HideCategories = new HashSet <string>();
            }

            contract.CanEditServerSettings = user.CanEditServerSettings;
            if (!string.IsNullOrEmpty(user.PlexUsers))
            {
                contract.PlexUsers =
                    new HashSet <string>(
                        user.PlexUsers.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                        .Select(a => a.Trim())
                        .Where(a => !string.IsNullOrEmpty(a)).Distinct(StringComparer.InvariantCultureIgnoreCase),
                        StringComparer.InvariantCultureIgnoreCase);
            }
            else
            {
                contract.PlexUsers = new HashSet <string>();
            }
            user.Contract = contract;
        }
コード例 #24
0
ファイル: Core.cs プロジェクト: gocheap/ShokoServer
        /// <summary>
        /// Delete user from his ID
        /// </summary>
        /// <returns></returns>
        private object DeleteUser()
        {
            Request request = this.Request;
            JMMUser _user   = (JMMUser)this.Context.CurrentUser;

            if (_user.IsAdmin == 1)
            {
                JMMUser user = this.Bind();
                if (new JMMServiceImplementation().DeleteUser(user.JMMUserID) == "")
                {
                    return(APIStatus.statusOK());
                }
                else
                {
                    return(APIStatus.internalError());
                }
            }
            else
            {
                return(APIStatus.adminNeeded());
            }
        }
コード例 #25
0
ファイル: Core.cs プロジェクト: gocheap/ShokoServer
        /// <summary>
        /// change given user (by uid) password
        /// </summary>
        /// <returns></returns>
        private object ChangePassword(int uid)
        {
            Request request = this.Request;

            Entities.JMMUser _user = (Entities.JMMUser) this.Context.CurrentUser;
            if (_user.IsAdmin == 1)
            {
                JMMUser user = this.Bind();
                if (new JMMServiceImplementation().ChangePassword(uid, user.Password) == "")
                {
                    return(APIStatus.statusOK());
                }
                else
                {
                    return(APIStatus.internalError());
                }
            }
            else
            {
                return(APIStatus.adminNeeded());
            }
        }
コード例 #26
0
        void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            ThisUser = null;

            VM_JMMUser user = cboUsers.SelectedItem as VM_JMMUser;

            if (user != null)
            {
                JMMUser retUser = VM_ShokoServer.Instance.ShokoServices.AuthenticateUser(user.Username, txtPassword.Password.Trim());
                if (retUser != null)
                {
                    ThisUser     = user;
                    DialogResult = true;
                    VM_ShokoServer.Instance.RefreshImportFolders();
                    Close();
                }
                else
                {
                    txtPassword.Focus();
                    txtStatus.Text = Shoko.Commons.Properties.Resources.Login_IncorrectPassword;
                }
            }
        }
コード例 #27
0
        private T CallPlexHelper <T>(Func <PlexHelper, T> act)
        {
            JMMUser user = HttpContext.GetUser();

            return(act(PlexHelper.GetForUser(user)));
        }
コード例 #28
0
ファイル: PlexWebhook.cs プロジェクト: maxpiva/ShokoServer
        private object CallPlexHelper(Func <PlexHelper, object> act)
        {
            JMMUser user = (JMMUser)this.Context.CurrentUser;

            return(act(PlexHelper.GetForUser(user)));
        }
コード例 #29
0
        public override void ProcessCommand()
        {
            logger.Info("Processing CommandRequest_MALDownloadStatusFromMAL");

            try
            {
                if (string.IsNullOrEmpty(ServerSettings.MAL_Username) || string.IsNullOrEmpty(ServerSettings.MAL_Password))
                {
                    return;
                }

                // find the latest eps to update
                AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository();

                myanimelist mal = MALHelper.GetMALAnimeList();
                if (mal == null)
                {
                    return;
                }
                if (mal.anime == null)
                {
                    return;
                }

                CrossRef_AniDB_MALRepository repCrossRef = new CrossRef_AniDB_MALRepository();
                AniDB_EpisodeRepository      repAniEps   = new AniDB_EpisodeRepository();
                AnimeEpisodeRepository       repEp       = new AnimeEpisodeRepository();

                // find the anidb user
                JMMUserRepository repUsers   = new JMMUserRepository();
                List <JMMUser>    aniDBUsers = repUsers.GetAniDBUsers();
                if (aniDBUsers.Count == 0)
                {
                    return;
                }

                JMMUser user = aniDBUsers[0];


                foreach (myanimelistAnime malAnime in mal.anime)
                {
                    // look up the anime
                    CrossRef_AniDB_MAL xref = repCrossRef.GetByMALID(malAnime.series_animedb_id);
                    if (xref == null)
                    {
                        continue;
                    }

                    if (malAnime.series_animedb_id == 8107 || malAnime.series_animedb_id == 10737)
                    {
                        Console.Write("");
                    }

                    // check if this anime has any other links
                    List <CrossRef_AniDB_MAL> allXrefs = repCrossRef.GetByAnimeID(xref.AnimeID);
                    if (allXrefs.Count == 0)
                    {
                        continue;
                    }

                    // find the range of watched episodes that this applies to
                    int startEpNumber = xref.StartEpisodeNumber;
                    int endEpNumber   = GetUpperEpisodeLimit(allXrefs, xref);

                    List <AniDB_Episode> aniEps = repAniEps.GetByAnimeID(xref.AnimeID);
                    foreach (AniDB_Episode aniep in aniEps)
                    {
                        if (aniep.EpisodeType != xref.StartEpisodeType)
                        {
                            continue;
                        }

                        AnimeEpisode ep = repEp.GetByAniDBEpisodeID(aniep.EpisodeID);
                        if (ep == null)
                        {
                            continue;
                        }

                        int adjustedWatchedEps = malAnime.my_watched_episodes + xref.StartEpisodeNumber - 1;
                        int epNum = aniep.EpisodeNumber;

                        if (epNum < startEpNumber || epNum > endEpNumber)
                        {
                            continue;
                        }

                        AnimeEpisode_User usrRec = ep.GetUserRecord(user.JMMUserID);

                        if (epNum <= adjustedWatchedEps)
                        {
                            // update if the user doesn't have a record (means not watched)
                            // or it is currently un-watched
                            bool update = false;
                            if (usrRec == null)
                            {
                                update = true;
                            }
                            else
                            {
                                if (!usrRec.WatchedDate.HasValue)
                                {
                                    update = true;
                                }
                            }

                            if (update)
                            {
                                ep.ToggleWatchedStatus(true, true, DateTime.Now, user.JMMUserID, false);
                            }
                        }
                        else
                        {
                            bool update = false;
                            if (usrRec != null)
                            {
                                if (usrRec.WatchedDate.HasValue)
                                {
                                    update = true;
                                }
                            }

                            if (update)
                            {
                                ep.ToggleWatchedStatus(false, true, DateTime.Now, user.JMMUserID, false);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error processing CommandRequest_MALDownloadStatusFromMAL: {0}", ex.ToString());
                return;
            }
        }
コード例 #30
0
 public CommandRequest_PlexSyncWatched(JMMUser jmmUser)
 {
     _jmmuser = jmmUser;
 }