feedblockcontroller

mail@pastecode.io avatar
unknown
plain_text
a year ago
72 kB
2
Indexable
Never
// Customizable Area Start
// @ts-nocheck
// @ts-ignore
import { IBlock } from '../../../../framework/src/IBlock'
import { Message } from '../../../../framework/src/Message'
import { BlockComponent } from '../../../../framework/src/BlockComponent'
import MessageEnum, {
  getName,
} from '../../../../framework/src/Messages/MessageEnum'
import { Alert, Platform, BackHandler, AppState } from 'react-native'
import { runEngine } from '../../../../framework/src/RunEngine'

import { spotifyLogout } from '../../../../framework/src/Helpers'
import { CommonContext } from '../../../../components/src/CommonContextProvider'
import {
  ActionCable,
  Cable,
} from '@kesha-antonov/react-native-action-cable'
import SoundPlayer from 'react-native-sound-player'
import { getStorageData, setStorageData } from '../../../../framework/src/Utilities'
import Apptheme from '../../../HamburgerMenu/src/Apptheme';
import OneSignal from 'react-native-onesignal'
import {
  auth as SpotifyAuth,
  remote,
  ApiScope,
} from 'react-native-spotify-remote';
import { chatBaseURL } from './FeedBlock'
export const configJSON = require('../config')


export interface Props {
  navigation: any
  id: string
  route: any
}

interface S {
  cableCon: any;
  notificationcableCon: any;
  index:number;
  showfeed: boolean
  showCreatepost: boolean
  progress: any
  indeterminate: boolean
  loading: boolean
  isSelected: boolean
  storydata: any
  guideList: boolean
  eventList: boolean
  exhibitionList: boolean
  enablePasswordField: boolean
  checkedRememberMe: boolean
  placeHolderEmail: string
  placeHolderPassword: string
  imgPasswordVisible: any
  labelHeader: string
  btnTxtLogin: string
  labelRememberMe: string
  btnTxtSocialLogin: string
  labelOr: string
  showGenre: any
  showTrending: boolean;
  feedPostList: any
  showStory: boolean
  showStory1: boolean;
  showDotsModal: boolean
  showReportModal: boolean
  toggleStar: boolean
  likePostId: any
  reportList: any
  getAllPostCommentList: any
  handleRefresh: any
  getReportList: any
  getPostRepostList: any
  userDetails: any
  userHandleName: any
  loader: boolean
  currentSongTitle: any
  currSongArtist: any
  currSongArtwork: any
  play: boolean
  pause: boolean
  isapple: boolean
  itemData: any
  isPlaying: boolean
  fullSongDetails: any;
  Musicindex: number;
  songImage: any;
  isLastPlayed: boolean;
  userProfilePic: any;
  userProfileUpload: any;
  takeAPicture: any;
  showModal: boolean;
  Artist: string;
  bandname: string;
  streaming_type: string;
  img_path: any;
  storyimageurl: any;
  storymediaurl: any;
  storybandname: any;
  storyartist: any;
  storyStreaming_type: any;
  audiofile: any;
  storyarray: any;
  profilepicture: any;
  lastPlayedSong: any;
  isFetching: boolean;
  postPageNuber: number;
  isLoading: boolean;
  totdalNumberOfPage: number;
  noMorePosts: boolean,
  isPostFooterLoading: boolean;
  contextData: boolean;
  contextId: number;
  refState: any;
  sondDetails: any;
  songImageUrl: string;
  isPlayFinished: boolean;
  playUrl: string;
  isPlayingContext: boolean;
  hidestory: boolean;
  spotifyUri: string;
  storyuserdata: any;
  selectedRadio: any;
  hardwareBackAlert: boolean;
  fullstoryArray: any;
  popularity: string;
  time: string
  Clickedstory: boolean;
  songDuration: any;
  playbackPosition: any;
  sliderValue: number;
  sliderDuration: number;
  duration: number;
  showMainGenre: boolean;
  hashTagId: any;
  hastagName: string;
  isFollowing: boolean;
  vibestationsArray: any;
  subscribeArray: any;
  ourStationArray: any;
  showNotification: boolean;
  message: string;
  platform: string;
  showTrendingFilter: boolean;
  showGenreFilter: boolean;
  selectedtab: string;
  showisFollowingGenre: boolean;
  passeditem: any;
  showFeedFilter: boolean;
  showRadioFilter: boolean;
  featureList: any;
  timefilter: string;
  popularityfilter: string;
  contentfilter: string;
  feedloading: boolean;
  deletePostId: any;
  pageNo: any;
  actionCable1: any;
  notificationActionCable1: any;
  trendingArray: any;
  GenretagList: any;
  routes: any;
  tabs:string
}

interface SS {
  id: any
}

export default class FeedBlockController extends BlockComponent<Props, S, SS> {
  actionCable: any;
  repostNotificationAPIcall: any;
  StationlistCallId: any;
  backHandler: any
  isHomeFocusState: boolean
  getNewTokenForSpotify: any;
  timeOfSeek: any
  unfollowingGenre: any;
  followingGenre: any;
  apiEmailLoginCallId: string = ''
  validationApiCallId: string = ''
  getPostListApiCallId: any
  getEndPostListApiCallId: any
  getPostListApiForRefreshCallId: any
  spotifyLikedSongList: any
  getPostRepostListCallId: any
  createLikeApiCallId: any
  createDisLikeApiCallId: any
  getReportListApiCallId: any
  deleteCommentApiCallId: any
  getStoryAccountListApiCallId: any
  deletePostApiCallId: any
  ReportPostApiCallId: any
  apiSendRepostId: any
  apiSendStoryId: any
  getStoryListApiCallId: any
  refScrollToTop: any;
  focusListener: any;
  aRef: any
  pauseInterval: any;
  _onFinishedPlayingSubscription: any;
  _onFinishedLoadingSubscription: any;
  _onFinishedLoadingFileSubscription: any;
  _onFinishedLoadingURLSubscription: any;
  apiFeedApi: any;
  emailReg: RegExp
  labelTitle: string = ''
  RBSheet: any
  RBSheet1: any
  spotifyConfig: any
  getSpotifyRefreshToken: any;
  apiSongsTrendingPost: any;
  genrelistCallId: any;
  
  static contextType = CommonContext;
  // Customizable Area End

  constructor(props: Props) {
    super(props)
    this.receive = this.receive.bind(this)

    // Customizable Area Start
    this.subScribedMessages = [
      getName(MessageEnum.CountryCodeMessage),
      getName(MessageEnum.RestAPIResponceMessage),
      getName(MessageEnum.ReciveUserCredentials),
    ]

    this.state = {
      message: '',
      cableCon: null,
      notificationcableCon: null,
      vibestationsArray: [],
      subscribeArray: [],
      ourStationArray: [],
      actionCable1: [],
      notificationActionCable1: [],
      showfeed: false,
      showCreatepost: false,
      isHomeFocusState: true,
      progress: 0,
      indeterminate: false,
      loading: false,
      guideList: false,
      eventList: false,
      exhibitionList: false,
      enablePasswordField: true,
      checkedRememberMe: false,
      placeHolderEmail: configJSON.placeHolderEmail,
      placeHolderPassword: configJSON.placeHolderPassword,
      imgPasswordVisible: configJSON.imgPasswordVisible,
      labelHeader: configJSON.labelHeader,
      btnTxtLogin: configJSON.btnTxtLogin,
      labelRememberMe: configJSON.labelRememberMe,
      btnTxtSocialLogin: configJSON.btnTxtSocialLogin,
      labelOr: configJSON.labelOr,
      showDotsModal: false,
      showReportModal: false,
      showStory: true,
      showStory1: false,
      songImage: '',
      storydata: [

      ],
      showGenre: false,
      showTrending: false,
      feedPostList: [],
      isSelected: false,
      toggleStar: false,
      getPostRepostList: [],
      likePostId: 0,
      reportList: [],
      getAllPostCommentList: [],
      handleRefresh: false,
      getReportList: [],
      userHandleName: '',
      userDetails: [],
      loader: false,
      currentSongTitle: '',
      currSongArtist: '',
      currSongArtwork: '',
      play: false,
      pause: true,
      isapple: false,
      itemData: null,
      isPlaying: false,
      fullSongDetails: {},
      Musicindex: -1,
      isLastPlayed: true,
      userProfileUpload: '',
      userProfilePic: '',
      takeAPicture: '',
      showModal: false,
      Artist: '',
      bandname: '',
      streaming_type: '',
      img_path: '',
      storyimageurl: "",
      storymediaurl: "",
      storybandname: "",
      storyartist: "",
      storyStreaming_type: "",
      audiofile: '',
      storyarray: [],
      profilepicture: '',
      lastPlayedSong: '',
      isFetching: false,
      postPageNuber: 1,
      isLoading: false,
      totdalNumberOfPage: 15,
      noMorePosts: false,
      isPostFooterLoading: false,
      contextData: true,
      contextId: -1,
      refState: [],
      sondDetails: [],
      songImageUrl: '',
      isPlayFinished: false,
      isPlayingContext: false,
      storyuserdata: [],
      hidestory: false,
      spotifyUri: '',
      hardwareBackAlert: false,
      selectedRadio: [],
      Clickedstory: false,
      popularity: 'top',
      time: 'today',
      content: 'following',
      fullstoryArray: [],
      songDuration: null,
      playbackPosition: null,
      sliderValue: 0,
      sliderDuration: 0,
      duration: 0,
      showMainGenre: false,
      hashTagId: 0,
      hastagName: '',
      isFollowing: false,
      showNotification: false,
      platform: '',
      showTrendingFilter: false,
      selectedtab: 'Feed',
      showisFollowingGenre: false,
      passeditem: [],
      showGenreFilter: false,
      showFeedFilter: false,
      showRadioFilter: false,
      featureList: [{ id: 1 }, { id: 2 }],
      timefilter: 'today',
      popularityfilter: 'new',
      contentfilter: 'following',
      feedloading: false,
      deletePostId: '',
      pageNo: 1,
      trendingArray: [],
      GenretagList: [],
      index: 0,
    routes: [
      { key: 'first', title: 'First' },
      { key: 'second', title: 'Second' },
    ],
    tabs:'featured'
    }

    this.spotifyConfig = {
      clientID: '3470398eb99c475389fd4f93148674f2',
      redirectURL: 'com.VibeSocialMusic://EmailAccountLoginBlock',
      scopes: [
        ApiScope.PlaylistReadPrivateScope,
        ApiScope.PlaylistReadCollaborativeScope,
        ApiScope.PlaylistModifyPublicScope,
        ApiScope.PlaylistModifyPrivateScope,
        ApiScope.UserFollowReadScope,
        ApiScope.UserFollowModifyScope,
        ApiScope.UserLibraryReadScope,
        ApiScope.UserLibraryModifyScope,
        ApiScope.UserReadEmailScope,
        ApiScope.UserReadPrivateScope,
        ApiScope.UserTopReadScope,
        ApiScope.UGCImageUploadScope,
        ApiScope.StreamingScope,
        ApiScope.AppRemoteControlScope,
        ApiScope.UserReadPlaybackStateScope,
        ApiScope.UserReadPlaybackPosition,
        ApiScope.UserModifyPlaybackStateScope,
      ],

    }

    this.emailReg = new RegExp('')
    this.labelTitle = configJSON.labelTitle


    runEngine.attachBuildingBlock(this as IBlock, this.subScribedMessages)
  }

  // componentDidUpdate(previousProps) {
  //   if (previousProps.navigation?.state?.params !== this.props?.navigation?.state?.params) {
  //     if (this.props.navigation?.state?.params?.index == 3) {
  //       this.setState({
  //         showfeed: false,
  //         guideList: false,
  //         eventList: true,
  //         exhibitionList: false,
  //         showGenre: true,
  //         showTrending: false,
  //         showStory: false,
  //         showisFollowingGenre: true,
  //         passeditem: this.props?.navigation?.state?.params?.item !== undefined && this.props?.navigation?.state?.params?.item !== null ? this.props?.navigation?.state?.params?.item : null
  //       })
  //     }
  //     else {
  //       this.StationlistApi()
  //     }
  //   }
  //   this._getlocationPermision()
  //   if (this.context.isHomeFocus !== this.state.isHomeFocusState) {
  //     if (!this.context.isHomeFocus) {
  //       BackHandler.removeEventListener('hardwareBackPress', this.handleOpen)
  //     }
  //   }
  // }

  async componentDidMount() {
    this.getPostListApi()
    this.GenrelistApi()
    this._fetchSongsTrendingApi()
    // this._notificationCheckActionCableConnect()
    // this._spotifyToken()
    // this._checkActionCableConnect()
    // this.getLikedSongList()
    // this.getSpotifyTokenForHours()
   

    // if (this.props.navigation?.state?.params?.index == 1) {

    //   this.setState({
    //     showfeed: true,
    //     guideList: true,
    //     eventList: false,
    //     exhibitionList: false,
    //     showGenre: false,
    //     showTrending: false,

    //     showStory: false,
    //   })
    // }

    // if (this.props.navigation?.state?.params?.index == 3) {

    //   this.setState({
    //     showfeed: false,
    //     guideList: false,
    //     eventList: true,
    //     exhibitionList: false,
    //     showGenre: true,
    //     showTrending: false,
    //     showStory: false,

    //   })
    // }
    // const platform = await getStorageData('PLATFORM')
    // this.setState({ platform: platform })

    // this.setState({ feedPostList: [] })
    // this.setState({ isLoading: true })
    // this.setState({ postPageNuber: 1 })
    // this.setState({ storyuserdata: [] })
    // this.setState({ loading: true })
    // this.setState({ isPlayingContext: !this.context.isplay })
    // this.StationlistApi()
    // this.getPostListApi()
    // this._getMusicT_info()
    // this.getReportListApi()
    // this.getUserData()
    // this.getPostRepost()
    // this.handleplatform()
    // this.GenrelistApi()
    // this.context.homeFocusFunction(true)
    // this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleOpen)


    // this._onFinishedPlayingSubscription = SoundPlayer.addEventListener('FinishedPlaying', ({ success }) => {

    //   this.context.playData(!this.context.isplay)
    //   this.context.isLastPlayedData(true)
    //   this.setState({ contextData: !this.state.contextData })
    //   this.setState({ isPlayFinished: true })
    // })

    // AppState.addEventListener('change', this._handleAppStateChange);
    // this.setState({ showNotification: false })
    // this.setState({ message: '' })
    // this.focusListener = this.props.navigation.addListener('didFocus', () => {

    //   if (this.props.navigation?.state?.params?.index !== undefined && this.props.navigation?.state?.params?.index === 7) {
    //     this.Quotednotification()
    //   }

    //   if (this.props.navigation?.state?.params?.index !== undefined && this.props.navigation?.state?.params?.index === 5) {
    //     this.setState({
    //       message: 'Post Successful',
    //       showfeed: true,
    //       guideList: true,
    //       eventList: false,
    //       exhibitionList: false,
    //       showGenre: false,
    //       showTrending: false,
    //       showStory: false,
    //       showNotification: true,
    //       postPageNuber: 1,
    //       feedPostList: []
    //     })

    //     setTimeout(() => {
    //       this.setState({ message: '', showNotification: false })

    //     }, 5000)
    //     this.getPostListApi()
    //   }
    //   if (this.props.navigation?.state?.params?.index !== undefined && this.props.navigation?.state?.params?.index === 10) {
    //     this.setState({
    //       showfeed: false,
    //       guideList: false,
    //       eventList: false,
    //       exhibitionList: false,
    //       showGenre: false,
    //       showTrending: false,
    //       showStory: true,
    //       showNotification: false
    //     })

    //   }
    // })
  }


  async receive(from: string, message: Message) {

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.StationlistCallId !== null &&
      this.StationlistCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.StationlistCallId = null;

      const responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage)
      );

      if (responseJson && !responseJson.errors) {
        this.setState({
          vibestationsArray:
            responseJson.vibe_stations.data.length > 0
              ? responseJson.vibe_stations.data.reverse()
              : [],
        });
        this.context.addVibeStations(responseJson.vibe_stations.data.reverse())

        this.setState({ loader: false });
      } else if (responseJson.errors) {
        this.setState({
          vibestationsArray: [],
          ourStationArray: [],
          subscribeArray: [],
        });
        this.setState({ loader: false });
      } else {
        this.parseApiErrorResponse(responseJson.data);
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getNewTokenForSpotify != null &&
      this.getNewTokenForSpotify === message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage)
      );

      if (responseJson !== undefined && responseJson?.errors === undefined) {
        // console.log(responseJson.data.attributes.spotify_access_token, "spotify_access_token")
        this._spotifyAccessToken(responseJson)
      } else {
        var errorReponse = message.getData(
          getName(MessageEnum.RestAPIResponceErrorMessage)
        );
        console.log(responseJson)
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.apiSendRepostId !== null &&
      this.apiSendRepostId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.apiSendRepostId = null
      this.setState({ loader: false })
      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (responseJson && !responseJson.errors && !responseJson?.data?.errors) {
        this.notification()

      } else if (responseJson?.errors) {

        this.setState({ loader: false })
      } else {
        this.setState({ loader: false })
        this.parseApiErrorResponse(responseJson.data)
      }
    }


    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.deletePostApiCallId != null &&
      this.deletePostApiCallId === message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage)
      );
      if (responseJson !== undefined && responseJson?.errors === undefined) {

        var feedList = this.state.feedPostList
        var filterData = feedList.filter((feed: any) => feed.id !== this.state.deletePostId)
        this.setState({ feedPostList: filterData, deletePostId: '' })
        this.setState({ showNotification: true, message: 'Post Deleted' })

        setTimeout(() => {
          this.setState({ message: '' })
        }, 5000)

        // you have response 
      } else {
        var errorReponse = message.getData(
          getName(MessageEnum.RestAPIResponceErrorMessage)
        );
        this.parseApiCatchErrorResponse(errorReponse);
      }

    }
    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.ReportPostApiCallId != null &&
      this.ReportPostApiCallId === message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage)
      );
      if (responseJson !== undefined && responseJson?.errors === undefined) {

        console.log("report", responseJson)
        // you have response 
      } else {
        var errorReponse = message.getData(
          getName(MessageEnum.RestAPIResponceErrorMessage)
        );
        this.parseApiCatchErrorResponse(errorReponse);
      }

    }


    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getPostRepostListCallId !== null &&
      this.getPostRepostListCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.getPostRepostListCallId = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (
        responseJson &&
        !responseJson?.errors &&
        !responseJson?.data?.errors
      ) {
        this.handlePostRepostResponseSuccessCallback(responseJson)

      } else if (responseJson?.errors) {

        this.setState({ loader: false })

      } else {
        this.parseApiErrorResponse(responseJson.data)
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getReportListApiCallId !== null &&
      this.getReportListApiCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.getReportListApiCallId = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (responseJson && !responseJson.errors && !responseJson.data.errors) {
        this.setState({ getReportList: responseJson.data })
        await setStorageData('REPORTLIST', JSON.stringify(responseJson.data))

      } else if (responseJson.errors) {
        console.log("getReportListApiCallId Error")
      } else {
        this.parseApiErrorResponse(responseJson.data)
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getPostListApiCallId !== null &&
      this.getPostListApiCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.getPostListApiCallId = null

      let responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )


      if (responseJson && !responseJson.errors && !responseJson.data.errors) {

        this.setState({ isPostFooterLoading: false })
        this.setState({ feedloading: false, feedPostList: [] })
        this.setState({
          feedPostList: responseJson?.data ? responseJson.data : [],
          handleRefresh: false,
        })

        this.setState({ loader: false })
        this.setState({ isFetching: false })
        this.setState({ isLoading: false })
        this.setState({ totdalNumberOfPage: responseJson.meta.total_pages })
        this.setState({ isPostFooterLoading: false })
      } else if (responseJson.errors) {
        this.setState({ noMorePosts: true })
        this.setState({ isPostFooterLoading: false })
        this.setState({ loader: false })
        this.setState({ feedloading: false })
      } else {
        this.setState({ noMorePosts: true })
        this.setState({ isPostFooterLoading: false })
        this.setState({ loader: false })
        this.parseApiErrorResponse(responseJson.data)
        this.setState({ feedloading: false })
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getEndPostListApiCallId !== null &&
      this.getEndPostListApiCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.getEndPostListApiCallId = null

      let responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (responseJson && !responseJson.errors && !responseJson.data.errors) {

        this.setState({ isPostFooterLoading: false })
        this.setState({ feedloading: false, postPageNuber: this.state.postPageNuber + 1 })
        this.setState({
          feedPostList: responseJson?.data ? this.state.feedPostList.concat(responseJson.data) : [],
          handleRefresh: false,
        })

        this.setState({ loader: false })
        this.setState({ isFetching: false })
        this.setState({ isLoading: false })
        this.setState({ totdalNumberOfPage: responseJson.meta.total_pages })
        this.setState({ isPostFooterLoading: false })
      } else if (responseJson.errors) {
        this.setState({ noMorePosts: true })
        this.setState({ isPostFooterLoading: false })
        this.setState({ loader: false })
        this.setState({ feedloading: false })
      } else {
        this.setState({ noMorePosts: true })
        this.setState({ isPostFooterLoading: false })
        this.setState({ loader: false })
        this.parseApiErrorResponse(responseJson.data)
        this.setState({ feedloading: false })
      }
    }


    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getPostListApiForRefreshCallId !== null &&
      this.getPostListApiForRefreshCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.getPostListApiForRefreshCallId = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )


      if (responseJson && !responseJson.errors && !responseJson.data.errors) {
        this.setState({ feedloading: false })
        this.setState({ totdalNumberOfPage: responseJson?.meta?.total_pages })
        this.setState({
          feedPostList: responseJson?.data,
          handleRefresh: false,
        })

        this.setState({ loader: false })
        this.setState({ isFetching: false })
        this.setState({ isLoading: false })
        this.setState({ isPostFooterLoading: true })

      } else if (responseJson.errors) {
        console.log('Post Api Error')
        this.setState({ loader: false })
        this.setState({ feedloading: false })
      } else {

        this.setState({ loader: false })
        this.parseApiErrorResponse(responseJson.data)
        this.setState({ feedloading: false })
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.apiFeedApi !== null &&
      this.apiFeedApi ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.apiFeedApi = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (responseJson && !responseJson.errors && !responseJson.data.errors) {
        this.setState({ feedloading: false, feedPostList: [] })
        this.setState({
          feedPostList: responseJson?.data ? responseJson.data : [],
          handleRefresh: false,
          loader: false
        })
        this.setState({ totdalNumberOfPage: responseJson?.meta?.total_pages })
        this.context.playDataAll(responseJson?.data ? responseJson.data : [])

      } else if (responseJson.errors) {
        console.log('Post Api Error')
        this.setState({ loader: false })
        this.setState({ feedloading: false })
      } else {

        this.setState({ loader: false })
        this.setState({ feedloading: false })
        this.parseApiErrorResponse(responseJson.data)
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.repostNotificationAPIcall !== null &&
      this.repostNotificationAPIcall ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.repostNotificationAPIcall = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )
      if (responseJson && !responseJson.errors && !responseJson.data.errors) {
        // alert('notificationsend')

      } else {

        this.setState({ loader: false })
        this.parseApiErrorResponse(responseJson.data)
      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.spotifyLikedSongList !== null &&
      this.spotifyLikedSongList ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.spotifyLikedSongList = null

      let responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )
      if (responseJson && responseJson.data) {
        if (responseJson?.data.length > 0) {
          this.context.likedSongListData(responseJson.data[0].items)
        }

      }
      else if (responseJson.data.error) {

        if (responseJson.data.error.message === "The access token expired") {
          const session = await SpotifyAuth.authorize(this.spotifyConfig)
          await setStorageData("USER_TOKEN_SPOTIFY", session.accessToken)
          this.getLikedSongList()
        }

      }
    }

    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.getSpotifyRefreshToken !== null &&
      this.getSpotifyRefreshToken ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.getSpotifyRefreshToken = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (responseJson && !responseJson.errors) {
        await setStorageData('USER_TOKEN_SPOTIFY', responseJson.accessToken.accessToken)

      }
    }
    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.apiSongsTrendingPost !== null &&
      this.apiSongsTrendingPost ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.apiSongsTrendingPost = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )

      if (responseJson) {
        this.setState({ trendingArray: [] })
        this.setState({ trendingArray: responseJson.data, loader: false })
        this.context.playDataAll(responseJson?.data ? responseJson.data : [])
      } else if (responseJson.errors) {

      } else {
        this.parseApiErrorResponse(responseJson.data)
      }
    }
    if (
      getName(MessageEnum.RestAPIResponceMessage) === message.id &&
      this.genrelistCallId !== null &&
      this.genrelistCallId ===
      message.getData(getName(MessageEnum.RestAPIResponceDataMessage))
    ) {
      this.genrelistCallId = null

      var responseJson = message.getData(
        getName(MessageEnum.RestAPIResponceSuccessMessage),
      )
      if (responseJson && !responseJson.errors) {
        this.setState({ GenretagList: responseJson.data })
      } else if (responseJson.errors) {
        this.setState({ GenretagList: [] })
      } else {
        this.parseApiErrorResponse(responseJson.data)
        this.setState({ loader: false })
      }
    }

  }

  handleTrending = async () => {
    this.setState({ showTrendingFilter: !this.state.showTrendingFilter })
  }

  handleGenre = async () => {
    this.setState({ showGenreFilter: !this.state.showGenreFilter })
  }

  handleFeed = async () => {
    this.setState({ showFeedFilter: !this.state.showFeedFilter })
  }
  handleRadio = async () => {
    this.setState({ showFeedFilter: !this.state.showFeedFilter })
  }
  handleplatform = async () => {
    const platform = await getStorageData('PLATFORM')
    this.setState({ platform: platform })
    console.log("ddddd", platform)
  }
  async componentWillUnmount() {
    // this._onFinishedPlayingSubscription.remove()
    // this._onFinishedLoadingSubscription.remove()
    // this._onFinishedLoadingURLSubscription.remove()
    // this._onFinishedLoadingFileSubscription.remove()

    // this.focusListener.remove()
    BackHandler.removeEventListener('hardwareBackPress', this.handleOpen)
  }

  playPauseSong = () => {
    if (this.context?.playSongData?.songMediaUrl !== '' && this.context?.playSongData?.songMediaUrl !== undefined && this.context?.playSongData?.songMediaUrl !== null) {
      if (this.context.isplay === false) {
        this.context.playData(true)
        SoundPlayer.pause()
      } else if (this.context.isplay === true) {
        if (this.state.progress > 0.9) {
          this.context.playData(false)
          console.log("eneneprger", this.context?.playSongData)
          SoundPlayer.playUrl(this.context?.playSongData?.songMediaUrl)
        } else if (this.state.progress < 0.9) {
          SoundPlayer.resume()
          this.context.playData(false)
        }
      }
    } else {
      this.context.playData(true)
    }
  }

  hastag = (e: any) => {
    this.setState({ hashTagId: e.attributes.id })
    this.setState({ hastagName: e.attributes.name })
    this.setState({ isFollowing: e.attributes.is_following })
    this.props.navigation.navigate("FeedBlock", {
      index: 3,
      item: e
    })
    this.setState({
      showfeed: false,
      guideList: false,
      eventList: true,
      exhibitionList: false,
      showGenre: true,
      showTrending: false,
      showStory: false,
      showisFollowingGenre: true,
      passeditem: e !== undefined && e !== null ? e : null
    })

  }

  handleSearch = () => {
    this.context.homeFocusFunction(false)
    this.props.navigation.navigate('ElasticSearch')
  }

  refreshnotification = async (id: any) => {
    console.log("repost", id);

    const token = await getStorageData('USER_TOKEN')


    const headers = {
      "Content-Type": "application/json",
      token
    };

    const getLikeNotifyValidation = new Message(
      getName(MessageEnum.RestAPIRequestMessage)
    );
    this.repostNotificationAPIcall = getLikeNotifyValidation.messageId;

    getLikeNotifyValidation.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      "bx_block_notifications/app_notifications"
      // configJSON.accountsEndPoint
    );

    getLikeNotifyValidation.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(headers)
    );
    getLikeNotifyValidation.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      "POST"
    );
    const Data = {
      "notification": {
        // id of person who will receive the notificaiton
        "notification_type": "repost", // post, like, play, comment, repost, tag, follow, message,like_comment
        "post_id": id, // null if post doesn't exists
        "comment_id": null, // null if comment doesn't exists
        "app_url": "app/post/10/comment/13" // to easily navigate to the screen in app
      }
    }
    getLikeNotifyValidation.addData(
      getName(MessageEnum.RestAPIRequestBodyMessage),
      JSON.stringify(Data)
    );
    runEngine.sendMessage(getLikeNotifyValidation.id, getLikeNotifyValidation);


  }

  _getlocationPermision = async () => {

    if (Platform.OS === "ios") {
      // requestLocationPermission()

    } else {

    }
  }

  _spotifyAccessToken = async (e: string,) => {

    try {
      let Spotifytoken = await e?.data?.attributes?.spotify_access_token
      await setStorageData('USER_TOKEN_SPOTIFY', Spotifytoken)
      console.log("refresh token done", Spotifytoken)

    } catch (error) {
      alert(error)
    }


  }


  handleSearchPage = () => {
    this.props.navigation.navigate("GenreElasticSearch", {
      id: this.state.hashTagId,
      name: this.state.hastagName,
      following: this.state.isFollowing
    })
  }



  handleOpen = () => {
    console.log('checking handle open');

    this.setState({ hardwareBackAlert: true })
    return true
  }
  handleClose = (status: any) => {
    if (status == 'yes') {
      this.handleHardwareBackButton()
    }
    this.setState({ hardwareBackAlert: false })

  }
  handleHardwareBackButton = () => {
    console.log('logOutCheck');

    BackHandler.exitApp()
  }

  handlePostRepostResponseSuccessCallback = async (responseJson: any) => {
    this.setState({
      getPostRepostList: responseJson?.data,
      loader: false,
      handleRefresh: false,
    })
  }

  getUserData = async () => {
    let data = await getStorageData('USER_DETAILS')

    data = JSON.parse(data)
    this.setState({ profilepicture: data.profile_pic_url ? data.profile_pic_url : '' })

  }

  StationlistApi = async () => {
    this.setState({ loader: true });
    const token = await getStorageData("USER_TOKEN");

    const header = {
      "Content-Type": configJSON.categoryMultiApiContentType,
      token: token,
    };
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage)
    );

    this.StationlistCallId = requestMessage.messageId;

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.doRadioEndPoint + `?page=${this.state.pageNo}&per_page=500000`
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header)
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType
    );

    runEngine.sendMessage(requestMessage.id, requestMessage);
    return true;
  };



  handleRepost = async (itemID: any) => {
    this.refreshnotification(itemID)
    this.setState({ loader: true, handleRefresh: true })
    const token = await getStorageData('USER_TOKEN')
    const _userId = await getStorageData('USER_ID')

    const formData = new FormData()
    formData.append('[data][post_id]', itemID)
    formData.append('[data][account_id]', _userId)
    formData.append('[data][message]', '')
    formData.append('token', token)

    // console.log('body of repost api==>>', formData)
    const header = {
      'Content-Type': 'multipart/form-data',
      token,
    }
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )

    this.apiSendRepostId = requestMessage.messageId

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.doRepostEndPoint,
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestBodyMessage),
      formData,
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpPostType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)

    return true
  }





  handlecommentScreen = (e: any) => {
    this.context.homeFocusFunction(false),
      this.props.navigation.navigate('FeedCardCommentScreen', {
        commentId: e?.attributes?.id,
        itemData: e?.attributes
      })
  }
  bottomBarclass = (value: any) => {
    this.setState({ showCreatepost: value })
  }
  getPostListApi = async () => {
    this.setState({ postPageNuber: 1 })
    const _token = await getStorageData('USER_TOKEN')
    this.setState({ feedloading: true })
    const header = {
      'Content-Type': configJSON.categoryApiContentType,
      token: _token,
    }
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )
    this.getPostListApiCallId = requestMessage.messageId

    let filterUrl = ""

    if (this.state.popularityfilter === 'top')
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber}&per_page=10&filter_by=${this.state.timefilter}&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`
    else
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber}&per_page=10&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`
    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }

  getEndpostListApi = async () => {
    const _token = await getStorageData('USER_TOKEN')
    const header = {
      'Content-Type': configJSON.categoryApiContentType,
      token: _token,
    }
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )
    this.getEndPostListApiCallId = requestMessage.messageId

    let filterUrl = ""
    if (this.state.popularityfilter === 'top')
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber + 1}&per_page=10&filter_by=${this.state.timefilter}&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`
    else
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber + 1}&per_page=10&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }


  getPostListApiForRefresh = async () => {

    const _token = await getStorageData('USER_TOKEN')

    const header = {
      'Content-Type': configJSON.categoryApiContentType,
      token: _token,
    }
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )
    this.getPostListApiForRefreshCallId = requestMessage.messageId

    let filterUrl = ""
    if (this.state.popularityfilter === 'top')
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber}&per_page=10&filter_by=${this.state.timefilter}&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`
    else
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber}&per_page=10&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`

    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }

  getfilterPostListApi = async (time: any) => {
    const _token = await getStorageData('USER_TOKEN')
    this.setState({ feedloading: true })
    const header = {
      'Content-Type': configJSON.categoryApiContentType,
      token: _token,
    }
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )
    this.getPostListApiCallId = requestMessage.messageId

    let filterUrl = ""
    if (this.state.popularityfilter === 'top')
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber + 1}&per_page=10&filter_by=${this.state.timefilter}&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`
    else
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber + 1}&per_page=10&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }

  _handleAppStateChange = (nextAppState: any) => {
    if (nextAppState === 'inactive') {
      console.log('App has come to the foreground!')
      // this.pause()
    }
    else {
      console.log('background ')
      // this.pause()
    }
  }

  notification = () => {

    this.setState({ showNotification: true })
    this.setState({ message: 'Post Replayed' })

    setTimeout(() => {
      this.setState({ message: '' })

    }, 5000);
  }

  Quotednotification = () => {

    this.setState({ showNotification: true })
    this.setState({ message: 'Quoted & Replayed' })

    setTimeout(() => {
      this.setState({ message: '' })

    }, 5000);
  }

  clearInterval = () => {
    setTimeout(() => {
      this.setState({ showNotification: false })
      this.setState({ message: '' })
    }, 5000);
    console.log("wfnwrifrsdssdsddsw", this.state.showNotification)

  }

  onRefresh1 = () => {
    this.setState({ isLoading: true })
    this.setState({ postPageNuber: 1 })
    this.setState({ loading: true })
    this.setState({ isPlayingContext: !this.context.isplay })
    this.getPostListApi() // main
    this._getMusicT_info()
    this.getReportListApi()
    this.getUserData()
    this.getPostRepost()
    this._onFinishedPlayingSubscription = SoundPlayer.addEventListener('FinishedPlaying', ({ success }) => {
      console.log('finished playing', success)
      this.context.playData(!this.context.isplay)
      this.context.isLastPlayedData(true)
      this.setState({ contextData: !this.state.contextData })
      this.setState({ isPlayFinished: true })

    })



  }

  //get list of Post and Repost from Feed
  getPostRepost = async () => {
    const _token = await getStorageData('USER_TOKEN')

    this.setState({
      loader: true,
    })
    const header = {
      'Content-Type': 'application/json',
      token: _token,
    }

    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )

    this.getPostRepostListCallId = requestMessage.messageId

    let filterUrl = ""
    if (this.state.popularityfilter == 'top')
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber + 1}&per_page=10&filter_by=${this.state.timefilter}&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`
    else
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber + 1}&per_page=10&popularity=${this.state.popularityfilter}&content=${this.state.contentfilter}`

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`,
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)

    return true
  }


  editpost = (item: any) => {
    this.context.homeFocusFunction(false)
    this.props.navigation.navigate('EditPostBlock', {
      editpostdata: item,
    })

  }

  playsong = (e: any) => {
    this.context.playDataAll(JSON.stringify(this.state.feedPostList));
    if (this.context.contextId !== this.context?.playSongDataAll[e].id) {
      this.context.playData(false)
      this.context.contextIdData(this.context?.playSongDataAll[e].id)
      if (this.context?.playSongDataAll[e].attributes.post_type === 'post') {
        this.context.playData(
          {
            songName: this.context?.playSongDataAll[e].attributes?.name,
            artistName: this.context?.playSongDataAll[e].attributes?.artist_name,
            songImageUrl: this.context?.playSongDataAll[e].attributes?.spotify_post_image_url ? this.context?.playSongDataAll[e].attributes?.spotify_post_image_url : '',
            songMediaUrl: this.context?.playSongDataAll[e].attributes?.spotify_post_media_url,
            bandName: this.context?.playSongDataAll[e].attributes?.band_name ? this.context?.playSongDataAll[e].attributes?.band_name : '',
            liked: this.context?.playSongDataAll[e].attributes?.liked,
            spotify_post_id: this.context?.playSongDataAll[e].attributes?.spotify_post_id ? this.context?.playSongDataAll[e].attributes?.spotify_post_id : ''
          }
        )
      } else if (this.context?.playSongDataAll[e].attributes.post_type === 'repost') {

        this.context.playData(
          {
            songName: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.name,
            artistName: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.artist_name,
            songImageUrl: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_image_url ? this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_image_url : '',
            songMediaUrl: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_media_url,
            bandName: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.band_name ? this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.band_name : '',
            liked: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.liked,
            spotify_post_id: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_id ? this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_id : ''
          })

      }
    } else if (this.context.contextId === this.context?.playSongDataAll[e].id) {
      this.context.playData(true)
      this.context.contextIdData(this.context?.playSongDataAll[e].id)
      if (this.context?.playSongDataAll[e].attributes.post_type === 'post') {
        this.context.playData(
          {
            songName: this.context?.playSongDataAll[e].attributes?.name,
            artistName: this.context?.playSongDataAll[e].attributes?.artist_name,
            songImageUrl: this.context?.playSongDataAll[e].attributes?.spotify_post_image_url ? this.context?.playSongDataAll[e].attributes?.spotify_post_image_url : '',
            songMediaUrl: this.context?.playSongDataAll[e].attributes?.spotify_post_media_url,
            bandName: this.context?.playSongDataAll[e].attributes?.band_name ? this.context?.playSongDataAll[e].attributes?.band_name : '',
            liked: this.context?.playSongDataAll[e].attributes?.liked,
            spotify_post_id: this.context?.playSongDataAll[e].attributes?.spotify_post_id ? this.context?.playSongDataAll[e].attributes?.spotify_post_id : ''
          }
        )
      } else if (this.context?.playSongDataAll[e].attributes.post_type === 'repost') {

        this.context.playData(
          {
            songName: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.name,
            artistName: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.artist_name,
            songImageUrl: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_image_url ? this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_image_url : '',
            songMediaUrl: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_media_url,
            bandName: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.band_name ? this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.band_name : '',
            liked: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.liked,
            spotify_post_id: this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_id ? this.context?.playSongDataAll[e].attributes?.post?.data?.attributes?.spotify_post_id : ''
          })

      }
    }
  }
  _increasePlayCount = async (e: any) => {
    const token = await getStorageData('USER_TOKEN')
    const header = {
      "Content-Type": configJSON.categoryApiContentType,
      token
    };


    const httpBody = {
      "id": e
    }

    const requestMessage = new Message(getName(MessageEnum.RestAPIRequestMessage));

    this.apiEmailLoginCallId = requestMessage.messageId;
    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      'song_played'
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header)
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestBodyMessage),
      JSON.stringify(httpBody)
    );

    requestMessage.addData(getName(MessageEnum.RestAPIRequestMethodMessage), configJSON.httpPostType);

    runEngine.sendMessage(requestMessage.id, requestMessage);

  }



  deleteAlert = () => {
    this.setState({
      message: 'Post Deleted',
      showfeed: true,
      guideList: true,
      eventList: false,
      exhibitionList: false,
      showGenre: false,
      showTrending: false,
      showStory: false,
      showNotification: true
    })

    setTimeout(() => {
      this.setState({ message: '' })

    }, 5000)
  }

  handleDeleteFeedPost = async (deletePostId: any) => {

    this.setState({ deletePostId: deletePostId })
    const _postId = deletePostId

    const _token = await getStorageData('USER_TOKEN')
    this.setState({ loader: true })
    const header = {
      'Content-Type': 'application/json',
      token: _token,
    }

    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )

    this.deletePostApiCallId = requestMessage.messageId

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.deletePostApiEndPoint + `/${_postId}`,
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpDeleteType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }

  handleHideFeedpost = async (hideId: any) => {
    var feedList = this.state.feedPostList
    var filterData = feedList.filter((feed: any) => feed.id !== hideId)
    this.setState({ feedPostList: filterData })
    this.setState({ showNotification: true, message: 'Post is hided' })
    setTimeout(() => {
      this.setState({ message: '', showNotification: false })

    }, 5000)

  }
  handleReportApi = async (reportId: any, reportItem: any) => {

    const _token = await getStorageData('USER_TOKEN')
    this.setState({ loader: true })
    const header = {
      'Content-Type': 'application/json',
      token: _token,
    }
    var formData = new FormData();
    formData.append('data[post_id]', reportItem?.attributes?.id)
    formData.append('data[report_id]', reportId.item.attributes.id)
    formData.append('data[description]', reportId.item.attributes.name)
    formData.append('token', _token)

    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )

    this.ReportPostApiCallId = requestMessage.messageId

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.reportEndPoint,
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestBodyMessage),
      formData
    ); requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpPostType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }



  getReportListApi = async () => {
    const _token = await getStorageData('USER_TOKEN')
    const header = {
      'Content-Type': 'application/json',
      token: _token,
    }

    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )

    this.getReportListApiCallId = requestMessage.messageId

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.getReportListApiEndPoint,
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )


    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true
  }

  _getMusicT_info = async () => {
    const lastPlayed = await getStorageData('LAST_PLAYED_SONG')


    if (lastPlayed !== null) {
      const lastPlayedParsed = await JSON.parse(lastPlayed)

      if (lastPlayedParsed !== null) {
        this.setState({ isLastPlayed: true })
        // console.log('lastPlayed', lastPlayed)
        this.setState({
          currentSongTitle: lastPlayedParsed.songName,
          currSongArtist: lastPlayedParsed.artistName,
        })
      }
    }
  }


  handleMenuIcon = () => {
    this.props.navigation.toggleDrawer()
  }

  saveFilterState = (time: any, popularity: any, content: any) => {
    this.setState({ timefilter: time, popularityfilter: popularity, contentfilter: content })
  }

  _fetchGenreApi = async (time: any, popularity: any, content: any) => {
    this.setState({ postPageNuber: 1, feedloading: true })

    const token = await getStorageData('USER_TOKEN')
    const header = {
      "Content-Type": configJSON.categoryApiContentType,
      token
    };

    let filterUrl = ""

    if (popularity == 'top')
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber}&per_page=10&filter_by=${time}&popularity=${popularity}&content=${content}`
    else
      filterUrl = `bx_block_posts/post_feed?page=${this.state.postPageNuber}&per_page=10&popularity=${popularity}&content=${content}`

    const requestMessage = new Message(getName(MessageEnum.RestAPIRequestMessage));
    this.apiFeedApi = requestMessage.messageId;
    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header)
    );
    requestMessage.addData(getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType);
    runEngine.sendMessage(requestMessage.id, requestMessage);
  }


  onRefresh = () => {
    console.log("me call hua");
    this.props.navigation.navigate('FeedBlock', { index: 1 })
    this.setState({
      showfeed: true,
      guideList: true,
      eventList: false,
      exhibitionList: false,
      showGenre: false,
      showTrending: false,
      showStory: false,
    })
    this.setState({ isFetching: true, feedloading: true, postPageNuber: 1 });
    this.getPostListApi()
  }

  playerIcon = () => { this.state.platform === 'apple' ? Apptheme.getapplemusic() : Apptheme.getspotifyhomeicon() }
  onRefreshVicon = () => {
    this.props.navigation.navigate('FeedBlock', { index: 1 })
    this.setState({
      showfeed: true,
      guideList: true,
      eventList: false,
      exhibitionList: false,
      showGenre: false,
      showTrending: false,
      showStory: false,
    })
    this.setState({ isFetching: true, feedloading: true, postPageNuber: 1 });
    this.getPostListApiForRefresh()
  }


  handlerepostnavigation = () => {
    this.setState({
      showfeed: true,
      guideList: true,
    })
  }

  navigateToProfile = async (e, f) => {
    const userdetaildata = await getStorageData('USER_ID')
    console.log(userdetaildata, 'userdetaildata')

    if (userdetaildata == e) {
      console.log('same user')
      this.context.homeFocusFunction(false)
      this.props.navigation.navigate('MyProfile')

    } else {
      console.log('different user')
      this.context.homeFocusFunction(false)
      this.props.navigation.navigate('CustomisableUserProfiles3', {
        anotherProfileId:
          e,
        anotherProfileEmail:
          f
      }
      )
    }

  }

  _handlePostMore = () => {

    if (this.state.totdalNumberOfPage >= (this.state.postPageNuber + 1)) {

      this.setState({ isPostFooterLoading: true })
      this.getEndpostListApi()

    } else (
      this.setState({ noMorePosts: true, isPostFooterLoading: false })
    )
  }

  pause = async () => {
    console.log('pause function is called')
    let song = await remote.getPlayerState()
    // this.setState({ songDuration: song.playbackPosition })
    console.log(song.playbackPosition, 'player state')
    this.context.seekDurationData(song.playbackPosition)
    this.context.totalDurationData(song.track.duration)

    await remote.pause();

    if (this.pauseInterval) {
      clearInterval(this.pauseInterval);
    }
    // this.pauseInterval = setInterval(async () => {
    //   await remote.playUri('spotify:artist:1fbo6ce8Pg6ZPWlpE3OkfQ')
    //   // await remote.setRepeatMode(true)
    //   await remote.resume();
    //   await remote.pause();
    // }, 15000);
  }


  _getLastPlayedSong = async () => {
    const lastPlayed = await getStorageData('LAST_PLAYED_SONG')
    if (lastPlayed !== null) {
      const lastPlayedParsed = await JSON.parse(lastPlayed)

      if (lastPlayedParsed !== null) {
        this.setState({ isLastPlayed: true })

        this.setState({ itemData: lastPlayedParsed.attributes })
        this.setState({ currentSongTitle: lastPlayedParsed.attributes.name })
        this.setState({ currSongArtist: lastPlayedParsed.attributes.artist_name })
        this.setState({ songImage: lastPlayedParsed.attributes.spotify_post_image_url })
        this.setState({ pause: false })
        this.setState({ isapple: false })
        SoundPlayer.playUrl(lastPlayedParsed.attributes.spotify_post_media_url)
        SoundPlayer.pause()


      } else {
        this.setState({ isLastPlayed: false })
      }
    } else {
      console.log('test')
    }


  }

  play = async (songUri: string) => {
    console.log("rngr", songUri)
    if (this.pauseInterval) {
      console.log('interval present')
      clearInterval(this.pauseInterval);
    }

    if (songUri !== null) {
      await remote.playUri(songUri);
      if (this.state.songDuration !== null) {
        await remote.seek(this.state.songDuration);
      }
      this.context.songUriData(songUri)
      // this.setState({ songName: songUri })

    } else {
      alert("Data is Empty")
    }

    console.log(songUri, "song URI")
    // await remote.playUri(songUri);
  }

  _spotifySignout = async () => {
    Alert.alert('Alert', 'to run spotify song you need to logout?', [
      {
        text: 'Cancel',
        onPress: () => {
          null
        },
      },
      {
        text: 'OK',
        onPress: () => {
          this.context.addData('light')
          spotifyLogout()
          this.props.navigation.replace('EmailAccountLoginBlock')
        }
      }
    ])
  }


  musicT = async (songs: any, id: number, details: any, uri: any) => {
    this.setState({ spotifyUri: uri })
    console.log("wenfw", this.state.spotifyUri)
    await remote.isConnectedAsync().then(async (isConnected: any) => {
      if (isConnected) {
        if (this.context.contextId !== id) {
          console.log('ONE')
          this.context.playData(false)
          this.context.contextIdData(id)
          this.context.songData(details)
          this.setState({ songDuration: null })
          this.play(uri)

        } else {
          if (this.context.contextId === id) {
            if (this.context.isplay) {
              console.log(this.context.isplay, "TWO")
              this.setState({ songDuration: null })
              this.context.playData(false)
              this.context.contextIdData(id)
              this.context.songData(details)
              this.play(this.state.spotifyUri)
            } else {
              console.log(this.context.isplay, 'THREE')
              this.context.playData(true)
              this.context.contextIdData(id)
              this.context.songData(details)
              this.pause()
            }
          }
          else {
            this.context.playData(true)
            this.context.contextIdData(id)
            this.context.songData(details)
            this.pause()
          }

        }
      }
      else {
        this._spotifySignout()
      }
    }).catch((err: any) => {
      console.log('Player not ready', err)
      this._spotifySignout()
    })

  }
  _checkNotification = () => {
    OneSignal.setNotificationWillShowInForegroundHandler(notificationReceivedEvent => {
      let notification = notificationReceivedEvent.getNotification();
      const data = notification.additionalData
      if (data.response.type === 'normal notification') {
        console.log('normal notification', this.context.normalCount)
        this.context.NormalCountData(this.context.normalCount + 1)
      } else {
        this.context.MessageCountData(this.context.MessageCount + 1)
      }
      console.log("additionalData: ", JSON.stringify(data.response.type));

      // Complete with null means don't show a notification.
      notificationReceivedEvent.complete(notification);
    });

    //Method for handling notifications opened
    OneSignal.setNotificationOpenedHandler(notification => {
      if (this.context.MessageCount > 0) {
        this.context.MessageCountData(this.context.MessageCount - 1)


      } else {
        this.context.NormalCountData(this.context.normalCount - 1)
      }
    });

  }
  _notificationCheckActionCableConnect = async () => {
    const token = await getStorageData('USER_TOKEN')

    this.actionCable = ActionCable.createConsumer(`wss://${chatBaseURL}/cable?token=${token}`)
    const cable = new Cable({
      channel: `AppNotificationsChannel`,

    })
    this.setState({ notificationcableCon: cable });
    this.setState({ notificationActionCable1: this.actionCable })

    const channel = cable.setChannel(
      `AppNotificationsChannel`,
      // channel name to which we will pass data from Rails app with `stream_from`
      this.actionCable.subscriptions.create({
        channel: `AppNotificationsChannel`, // from Rails app app/channels/chat_channel.rb
        // chat_id:8

      })
    );

    channel
      .on("received", (e: any) => {

        console.log('normal notification count', e)

        //
        if (e && e !== undefined) {

          this.context.NormalCountData(e?.unread_notification_count)
        }
      }
      )
      .on("connected", (e: any) => console.log(e, "AppNotificationsChannel Notification from server is connected"))
      .on("rejected", (e: any) => console.log(e, "rejected"))
      .on("disconnected", (e) => {
        console.log("disconnect", e);
        this.actionCable.disconnect();
      });
  }
  _checkActionCableConnect = async () => {

    const token = await getStorageData('USER_TOKEN')

    this.actionCable = ActionCable.createConsumer(`wss://${chatBaseURL}/cable?token=${token}`)
    const cable = new Cable({
      channel: `UnreadCountsChannel`,

    })
    this.setState({ cableCon: cable });
    this.setState({ actionCable1: this.actionCable })

    const channel = cable.setChannel(
      `UnreadCountsChannel`,
      // channel name to which we will pass data from Rails app with `stream_from`
      this.actionCable.subscriptions.create({
        channel: `UnreadCountsChannel`, // from Rails app app/channels/chat_channel.rb
        // chat_id:8

      })
    );

    channel
      .on("received", (e: any) => {
        // this._onRecieved(e)
        console.log('bheja mari', e)

        //
        if (e && e !== undefined) {
          this.context.MessageCountData(e?.unread_messages_count)

        }
      }
      )
      .on("connected", (e: any) => console.log(e, "UnreadCountsChannel from server is connected"))
      .on("rejected", (e: any) => console.log(e, "rejected"))
      .on("disconnected", (e) => {
        console.log("disconnect", e);
        this.actionCable.disconnect();
      });
  }

  sharePostNotification = () => {
    this.setState({ showNotification: true, message: 'Message Sent' })
    setTimeout(() => {
      this.setState({ message: '', showNotification: false })

    }, 5000)
  }
  _spotifyToken = async () => {
    const spotify = await getStorageData('USER_TOKEN_SPOTIFY');
    if (spotify === null) {
      this.props.navigation.navigate('StreamingAccount3')
    }
  }

  getLikedSongList = async () => {
    const token = await getStorageData('USER_TOKEN')
    const spotify = await getStorageData('USER_TOKEN_SPOTIFY');

    const header = {
      token
    };

    const requestMessage = new Message(getName(MessageEnum.RestAPIRequestMessage));

    this.spotifyLikedSongList = requestMessage.messageId;

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.likedTracksList + spotify
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header)
    );

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage ),
      'GET'
    );
    runEngine.sendMessage(requestMessage.id, requestMessage)

  }

  getSpotifyTokenForHours = async () => {
  }

  getAccessTokenAPI = async () => {

    const token = await getStorageData('USER_TOKEN')

    const header = {
      'Content-Type': 'application/json',
      token
    }

    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),

    )
    this.getSpotifyRefreshToken = requestMessage.messageId

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      '/refresh'
    )
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header)
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      'POST',
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)

    return true
  }

  _fetchSongsTrendingApi = async () => {
    this.setState({ loader: true })

    const token = await getStorageData('USER_TOKEN')
    const header = {
      "Content-Type": "application/json",
      token
    };
    const requestMessage = new Message(getName(MessageEnum.RestAPIRequestMessage));
    this.apiSongsTrendingPost = requestMessage.messageId;
    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      configJSON.trendingApiEndPoint
    );
    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header)
    );
    requestMessage.addData(getName(MessageEnum.RestAPIRequestMethodMessage), configJSON.httpGetType);
    runEngine.sendMessage(requestMessage.id, requestMessage);
  }

  GenrelistApi = async () => {
    this.setState({ loader: true })
    const token = await getStorageData('USER_TOKEN')

    const header = {
      'Content-Type': 'multipart/form-data',
      token: token,
    }
    const requestMessage = new Message(
      getName(MessageEnum.RestAPIRequestMessage),
    )

    this.genrelistCallId = requestMessage.messageId
    let filterUrl = ''

    if (this.state.popularityfilter == 'top')
      filterUrl = `bx_block_posts/genre_feed/${this.state.popularityfilter}?filter_by=${this.state.timefilter}&content=${this.state.contentfilter}&page=${this.state.postPageNuber}`
    else
      filterUrl = `bx_block_posts/genre_feed/${this.state.popularityfilter}?&content=${this.state.contentfilter}&page=${this.state.postPageNuber}`

    requestMessage.addData(
      getName(MessageEnum.RestAPIResponceEndPointMessage),
      `${filterUrl}`
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestHeaderMessage),
      JSON.stringify(header),
    )

    requestMessage.addData(
      getName(MessageEnum.RestAPIRequestMethodMessage),
      configJSON.httpGetType,
    )

    runEngine.sendMessage(requestMessage.id, requestMessage)
    return true

  }

  toggleTabsButtons = (index: any) => {
 
    if (index == 0) {
      this.setState({
       tabs:'featured'
        
      });
    } else if (index == 1) {
      this.setState({
        tabs:'feed'
      });
    } else if (index == 2) {
      this.setState({
       tabs:'genre'
      });
    } else if (index == 3) {
      this.setState({
      tabs:'trending'
      });
    } else if (index == 4) {
      this.setState({
        tabs:'filter'
        });
      if (this.state.eventList) {
        this.setState({ showGenreFilter: !this.state.showGenreFilter });
      }

      if (this.state.showfeed) {
        this.setState({ showFeedFilter: !this.state.showFeedFilter });
      }
      if (this.state.showTrending) {
        this.setState({ showTrendingFilter: true });
      }
    }
  };

  _getData = (e) => {
    console.log(e)
  }

  
  handlecontent = (e:any) => {
    this.setState({tabs:'featured'})
console.log(e,"e")
  }

  handlepopularity = (e:any) => {
   console.log(e)
   this.setState({popularityfilter:e})
  }

  handletime = (e:any) => {
    console.log(e)
    this.setState({timefilter:e})
  }

  filterApply = (e:any) => {
    this.setState({tabs:'featured'})
  }

  close = () => {
    this.setState({tabs:'featured'})
    
  }


}
// Customizable Area End