예제 #1
0
async def create_playlist(window: Window):
    playlists_count = db.get_session().query(Playlist).count()
    default_name = f'playlist {playlists_count + 1}'
    playlist_name = await window.input('new playlist name:', default_name)

    playlist = Playlist(name=playlist_name)
    db.get_session().add(playlist)
    db.get_session().commit()
예제 #2
0
 def wrapper(update: Update, context: CallbackContext) -> Any:
     result = None
     try:
         session = get_session()
         message: Message = update.effective_message
         user = get_user(session, update.effective_user)
         if user.banned:
             message.chat.send_message("Anda dibanned!")
             return result
         core_context = CoreContext.from_data(update, context, session,
                                              user)
         result = func(update, core_context)
     except BaseException:
         msg = "Gagal menghubungi elearning! Coba beberapa saat lagi."
         if update.callback_query:
             update.callback_query.answer(msg, show_alert=True)
         else:
             update.effective_message.reply_text(msg)
     except RollbackException as e:
         session.rollback()
         if update.callback_query:
             update.callback_query.answer(e.message)
         else:
             update.effective_message.reply_text(e.message)
     except Exception as e:
         if not ignore_exception(e):
             allert_devs(update, context)
     finally:
         if "session" in locals():
             session.close()
         return result
예제 #3
0
    def open_playlist(self, playlist_name: str):
        playlist = (
            db.get_session()
            .query(Playlist)
            .filter(Playlist.name == playlist_name)
            .one()
        )

        if not playlist:
            logger.error(f"Unable to open playlist {playlist_name}")
            return

        tabs_layout = self.app.ui.tabs_layout
        tab = tabs_layout.get_tab(playlist.name)
        if tab:
            self.remove_current_tab_from_stack()
            tabs_layout.switch_to_tab(tab)
            self.app.window.focus(tab.component)
        else:
            tracks_view = PlaylistTracksComponent(playlist)
            self.remove_current_tab_from_stack()
            self.app.ui.tabs_layout.add_tab(
                Tab(title=playlist.name, component=tracks_view)
            )
            self.app.window.focus(tracks_view)
예제 #4
0
def get_user(username):
    """
    查询用户
    """
    db = get_session()
    user = db.query(User).filter(User.username == username).first()
    db.close()
    return user
예제 #5
0
    def filter(self, query: str):
        session = db.get_session()

        query = f"%{query}%"
        self.data = self.query(
            session.query(Playlist.name).filter(
                Playlist.name.ilike(query)).scalar())

        self.mark_for_redraw()
예제 #6
0
    def on_delete(self, tracks: List[Track]):
        session = db.get_session()

        self.get_query().filter(
            PlaylistTrack.track_id.in_(
                t.id for t in tracks)).delete(synchronize_session=False)

        session.commit()

        self.load_playlist()
예제 #7
0
 async def on_delete(self, playlists_names: List[str]):
     session = db.get_session()
     app = App.get_instance()
     yesno = (await
              app.window.input("Delete selected playlists? (y/n)") == "y")
     if yesno:
         session.query(Playlist).filter(
             Playlist.name.in_(playlists_names)).delete(
                 synchronize_session=False)
         session.commit()
         self.load_playlists()
예제 #8
0
    def create_operate_record(username, ip, old_object=None, new_object=None):
        """
        创建修改记录
        @param old_object: 修改前的类
        @param new_object: 修改后的类
        @param username: 修改用户名
        @param ip: 修改ip
        @return:
        """
        # 获取修改的类名
        operate_object = new_object.__class__.__name__ if new_object else old_object.__class__.__name__
        # 判断修改的类型
        if not old_object:
            operate_type = "新增"
            operate_detail = new_object.__dict__
            operate_detail.pop("_sa_instance_state")
            # ensure_ascii设为False,这样存入数据库不会变成unicode码
            operate_detail = json.dumps(operate_detail, ensure_ascii=False)
        elif not new_object:
            operate_type = "删除"
            operate_detail = old_object.__dict__
            operate_detail.pop("_sa_instance_state")
            operate_detail = json.dumps(operate_detail, ensure_ascii=False)
        else:
            operate_type = "修改"
            # __dict__获取所有类所有属性
            old_object_dict = old_object.__dict__
            old_object_dict.pop("_sa_instance_state")
            new_object_dict = new_object.__dict__
            new_object_dict.pop("_sa_instance_state")
            operate_detail = []
            for field in old_object_dict.keys():
                if old_object_dict[field] != new_object_dict[field]:
                    operate_detail.append({
                        "name": field,
                        "old": old_object_dict[field],
                        "new": new_object_dict[field]
                    })
            if len(operate_detail) == 0:
                # 说明没有修改,不必记录
                return
            operate_detail = json.dumps(operate_detail, ensure_ascii=False)

        record_dict = {
            "operate_object": operate_object,
            "operate_type": operate_type,
            "operate_detail": operate_detail,
            "operate_ip": ip,
            "operate_username": username
        }
        db = get_session()
        operate_record = OperateRecords(**record_dict)
        db.add(operate_record)
        db.commit()
예제 #9
0
 def wrapper(context: CallbackContext) -> Any:
     result = None
     try:
         session = get_session()
         result = func(context, session)
     except Exception as e:
         if not ignore_exception(e):
             raise e
     finally:
         if "session" in locals():
             session.close()
         return result
예제 #10
0
    def on_paste(self, tracks: List[Track]):
        session = db.get_session()

        start_index = self.get_query().count()

        playlist_tracks = [
            PlaylistTrack(
                playlist_id=self.playlist.id,
                track_id=track.id,
                order=start_index + index,
            ) for index, track in enumerate(tracks)
        ]

        session.bulk_save_objects(playlist_tracks)
        session.commit()

        self.load_playlist()
예제 #11
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        session = db.get_session()

        self.data = list(session.query(Track))
예제 #12
0
async def push_all_tracks(tracks_component: TracksComponent, force=False):
    all_tracks = get_session().query(Track).all()
    await CloudSynchronizer().push_tracks(all_tracks, force)
예제 #13
0
 def get_query(self):
     session = db.get_session()
     return session.query(PlaylistTrack).filter(
         PlaylistTrack.playlist_id == self.playlist.id)
예제 #14
0
 def _mark_as_synced(self, track: Track):
     track.cloud_synced = True
     get_session().commit()